首页 > 滴滴 测开笔试 8月21日 编程求解答
头像
yummc
编辑于 2020-08-22 09:39
+ 关注

滴滴 测开笔试 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不了真的心态很爆炸。求大神们帮帮忙,看看哪里有问题,让我吃一堑长一智🤣🤣🤣

全部评论

(6) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐