滴滴笔试答案分享

现在考试已经结束了吧,那分享一下我的做法吧

滴滴笔试分享

第一题

n = input()
g = input().split()
y = input().split()

flag = False

gh = []
gl = []
yh = []
yl = []

# 找出跳高成绩 比 x 好的和差的
for ch in g:
    if ch == 'X':
        flag = True
    if not flag:
        gh.append(ch)
    if flag:
        if ch != 'X':
            gl.append(ch)  

flag = False

# 找出跳远成绩比x好的和差的
for ch in y:
    if ch == 'X':
        flag = True
    if not flag:
        yh.append(ch)
    if flag:
        if ch != 'X':
            yl.append(ch)  




h = [ch for ch in gh if ch in yh]
l = [ch for ch in gl if ch in yl]


print(len(h) + 1, end=' ')
print(int(n) - len(l))

第二题

#include <iostream>


using namespace std;
const int N = 12;
long long g[N][N];
long long num[N * N];

int main(){

    int n;
    scanf("%d", &n);

    num[1] = 1;
    num[2] = 1;

    // 求斐波那契数列
    for(int i = 3; i <= n * n; i ++){
        num[i] = num[i - 1] + num[i - 2];
    }

    int cnt = n * n;

    int dx[4] = {0, 1, 0, -1};
    int dy[4] = {1, 0, -1, 0};

    // 讲数列填入数组
    for(int i = 0, d = 0, k = cnt, x = 0, y = 0; k > 0; k --){
        g[x][y] = num[k];
        int nx = x + dx[d];
        int ny = y + dy[d];
        if(nx < 0 || nx >= n || ny < 0 || ny >= n || g[nx][ny] != 0){
            d = (d + 1) % 4;
            nx = x + dx[d];
            ny = y + dy[d];
        }
        x = nx;
        y = ny;
    }

    // 输出
    for(int i = 0; i < n; i ++){
        for(int j = 0; j < n; j ++){
            printf("%lld ", g[i][j]);
        }
        puts("");
    }

    return 0;
}
#滴滴##笔试题目#
全部评论
第二题C++ #include<iostream> #include<vector> using namespace std; int main() {  int n;  cin >> n;  vector<int>fib(n*n, 0);  fib[0] = 1;  fib[1] = 1;  for (int i = 2; i < n*n; i++)  {   fib[i] = fib[i - 1] + fib[i - 2];  }  int res = fib.size() - 1;  int left = 0, right = n - 1, top = 0, bottom = n - 1; //top、bottom横坐标 ; left、right纵坐标   vector<vector<int>>vec(n,vector<int>(n,0));  while (1)  {   for (int i = left; i <= right; ++i)   {    vec[top][i] = fib[res];    --res;   }   if (++top > bottom)    break;   for (int j = top; j <= bottom; ++j)   {    vec[j][right] = fib[res];    --res;   }   if (--right < left)    break;   for (int m = right; m >= left; --m)   {    vec[bottom][m] = fib[res];    --res;   }   if (--bottom < top)    break;   for (int n = bottom; n >= top; --n)   {    vec[n][left] = fib[res];    res--;   }   if (++left > right)    break;  }  for (auto n : vec)  {   vector<int>temp = n;   for (auto m : temp)    cout << m << " ";   cout << endl;  }  return 0; }
点赞 回复 分享
发布于 2020-08-23 11:04
怎么题不一样?第一题给n,让求a+b=n有几对
点赞 回复 分享
发布于 2020-08-21 21:42
第一题我是找到两个数组中“x”的位置,然后分前后用set求交集 最后输出结果 我的第二题是找china
点赞 回复 分享
发布于 2020-08-21 21:34
题目是什么呀大佬
点赞 回复 分享
发布于 2020-08-21 21:24
感觉手机看,格式会乱,电脑端看比较好
点赞 回复 分享
发布于 2020-08-21 20:54
我第一题思路和你一样,但是我的输入读取就出现了预期之外的偏差,我人傻了
点赞 回复 分享
发布于 2020-08-21 20:49
😥第二题不会往数组里填 难顶
点赞 回复 分享
发布于 2020-08-21 20:47
第一题思路一样,只55%
点赞 回复 分享
发布于 2020-08-21 20:46

相关推荐

06-04 16:50
腾讯_TEG_技术
点赞 评论 收藏
分享
评论
5
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务