现在考试已经结束了吧,那分享一下我的做法吧
滴滴笔试分享
第一题
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;
}
全部评论
(8) 回帖