今晚的编程被虐到了,两道题很简单,感觉写的也没错,但是就是过不了,求大神们帮忙看看哪里有问题😂😂😂
题目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不了真的心态很爆炸。求大神们帮帮忙,看看哪里有问题,让我吃一堑长一智🤣🤣🤣
全部评论
(6) 回帖