滴滴 测开笔试 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不了真的心态很爆炸。求大神们帮帮忙,看看哪里有问题,让我吃一堑长一智🤣🤣🤣
#笔试题目##滴滴#
全部评论
第一次主要是输入输出不对吧,直接 cin >> n 就行了 不需要while 读入
1 回复 分享
发布于 2020-08-22 09:14
你第六行的main函数过不了编译吧
点赞 回复 分享
发布于 2020-08-22 09:13
我发了个帖子 有全ac的代码 你可以看看 我明天早上看看你的问题在哪
点赞 回复 分享
发布于 2020-08-21 22:42
第二题c++的话用int会溢出,代码逻辑没细看
点赞 回复 分享
发布于 2020-08-21 22:26
------- python -------- 无代码高亮🤦‍ ------- def solve2():     n = int(sys.stdin.readline().strip())     snake, size = [1,1, 2], n * n     while len(snake) < size:         num = snake[-2] + snake[-1]         snake.append(num)     snake = snake[::-1]     matrix = [[1] * n for _ in range(n)]     x, y = 0, 0     i, start, end = n, 0, 0     while i > 0:         end = start + i * 2 + ( i - 2) * 2          helper(matrix, x, y, i, snake[start: end])         x, y, start = x + 1, y + 1, end         i -= 2     for row in matrix:         print( " ".join([str(_) for _ in row ] ) )          def helper(matrix, x, y, n, nums):     indexes = []     indexes.extend( [ (x,b) for b in range(y, y+n-1) ] )     indexes.extend( [ (a,y+n-1) for a in range(x, x+n-1)] )     indexes.extend( [ (x+n-1, b) for b in range(y+n-1, y, -1)])     indexes.extend( [(a, y) for a in range(x+n-1, x, -1) ])     i = 0     for a, b in indexes:         matrix[a][b] = nums[i]         i += 1
点赞 回复 分享
发布于 2020-08-21 22:21
我是后端,第一个题目不一样,我们是求数字和的用暴力解决比较简单;第二个题目一样,我没用动态规划,用的迭代方法,就是先填一圈,再填里面一圈,有点手动化🤣 -------------------------------- 代码超字数了,看下一个回复‍
点赞 回复 分享
发布于 2020-08-21 22:18

相关推荐

点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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