滴滴 测开笔试 8月21日 编程求解答
今晚的编程被虐到了,两道题很简单,感觉写的也没错,但是就是过不了,求大神们帮忙看看哪里有问题😂😂😂
题目1:小小X调高和跳远,求小小X的最好成绩和最坏成绩
输入:参加比赛的人数N,第一行是跳远成绩由高到低,第二行是跳高成绩由高到低
我的代码:通过率只有55%,
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main(){
int n;
while(cin>>n){
vector<char> str1(n);
vector<char> str2(n);
for(int i=0;i<n;i++)
cin>>str1[i];
for(int i=0;i<n;i++)
cin>>str2[i];
set<char> before;//记录第一行成绩中在小小x前面的
set<char> after;//记录第一行成绩中在小小x后面的
int i=0;
while(i<str1.size()&&str1[i]!='X'){
before.insert(str1[i]);
i++;
}
i++;//跳过小小x
while(i<str1.size()){
after.insert(str1[i]);
i++;
}
int j=0;
int good=0;
while(j<str2.size()&&str2[j]!='X'){
if(before.count(str2[j]))
good++;
j++;
}
j++;//跳过小小x
int bad=0;
while(j<str2.size()){
if(after.count(str2[j]))
bad++;
j++;
}
cout<<good+1<<' '<<n-bad<<endl;
}
return 0;
} 题目2:斐波那契蛇 输入:n
输出:n*n的数组,要求从第一行第一列开始,按照顺时针数组遍历形成一个逆序的斐波那契数列,
我的代码:通过率更少,9%
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
while(cin>>n){
vector<int> dp(n*n,0);
dp[0]=1;
dp[1]=1;
for(int i=2;i<n*n;i++)
dp[i]=dp[i-1]+dp[i-2];
vector<vector<int>> matrix(n,vector<int>(n,0));
vector<vector<bool>> visited(n,vector<bool>(n,false));
int d[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int di=0;
int r=0;
int c=0;
for(int i=n*n-1;i>=0;i--){
matrix[r][c]=dp[i];
visited[r][c]=true;
int tmpr=r+d[di][0];
int tmpc=c+d[di][1];
if(tmpr>=0 && tmpr<n && tmpc>=0 && tmpc<n && !visited[tmpr][tmpc]){
r+=d[di][0];
c+=d[di][1];
}else{
di=(di+1)%4;
r+=d[di][0];
c+=d[di][1];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(j!=n-1)
cout<<matrix[i][j]<<' ';
else
cout<<matrix[i][j]<<endl;
}
}
}
return 0;
} 如上,改了40多分钟,实在是找不到错在哪里了,简单的题目都AC不了真的心态很爆炸。求大神们帮帮忙,看看哪里有问题,让我吃一堑长一智🤣🤣🤣


