初莫M 发表于 2023-11-4 19:16:07

错在哪了啊

达米奇同学的学校组织信息学竞赛模拟,发现了成绩并列如何排名是个难题。例如有四名选手的成绩分别为 50、80、50、30 分,则 80 分的选手为第一名,50 分的两名选手均为第二名,30 分的选手为第四名。老师请达米奇同学编写一个程序,计算一个选手在这种排名方式之下的名次(分数高的选手排前面)。

输入描述
第一行:一个整数 n
,表示参赛的选手数;

第二行:n
个整数,表示每位选手的成绩,两数之间用一个空格隔开;

第三行:一个整数,表示要查询名次的选手的成绩。

输出描述
一行:一个整数,表示该选手的名次。
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;int a;int i,j,k,t,x;
    cin>>n;
    for(i=0;i<n;i++)
    {
      cin>>a;
    }
    for(i=0;i<n-1;n++)
    {
      for(j=0;j<n-1-i;j++)
      {
            if(a<a)
            {
                t=a;a=a;a=t;
            }
      }
    }
    a=1;
    for(i=1;i<n-1;i++)
    {
      if(a==a)
      {
            a=a;
      }
      else a=a+1;
    }
    cin>>x;
    for(i=0;i<n;i++)
    {
      if(a==x){cout<<a;break;}
    }
}

isdkz 发表于 2023-11-4 19:16:16

这段代码有两个错误,分别是:

1. 在第二个for循环中,n++应该改为i++。

2. 在第二个for循环中,i应该从0开始,而不是从1开始。

正确代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    int a;
    int i,j,k,t,x;
    cin>>n;
    for(i=0;i<n;i++)
    {
      cin>>a[ i];
    }
    for(i=0;i<n-1;i++)
    {
      for(j=0;j<n-1-i;j++)
      {
            if(a<a)
            {
                t=a;
                a=a;
                a=t;
            }
      }
    }
    a=1;
    for(i=1;i<n;i++)
    {
      if(a[ i]==a)
      {
            a[ i]=a;
      }
      else a[ i]=a+1;
    }
    cin>>x;
    for(i=0;i<n;i++)
    {
      if(a[ i]==x){
            cout<<a[ i];
            break;
      }
    }
}

Mike_python小 发表于 2023-11-4 19:18:15

以下是对你提供的代码进行修改和优化的建议:


#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Player {
    int score;
    int rank;
};

bool comparePlayer(const Player& p1, const Player& p2) {
    return p1.score > p2.score;
}

int main() {
    int n;
    cin >> n;

    vector<Player> players(n);
    for (int i = 0; i < n; i++) {
      cin >> players.score;
    }

    sort(players.begin(), players.end(), comparePlayer);

    int currentRank = 1;
    players.rank = 1;

    for (int i = 1; i < n; i++) {
      if (players.score == players.score) {
            players.rank = players.rank;
      }
      else {
            players.rank = i + 1;
      }
    }

    int queryScore;
    cin >> queryScore;

    int queryRank = -1;
    for (int i = 0; i < n; i++) {
      if (players.score == queryScore) {
            queryRank = players.rank;
            break;
      }
    }

    cout << queryRank << endl;

    return 0;
}


这里是对你的代码进行的改进:

1. 使用vector来存储选手的信息,而不是使用二维数组。
2. 创建一个Player结构体来存储每个选手的分数和排名。
3. 使用自定义的比较函数comparePlayer来排序选手,按照分数从高到低排序。
4. 使用sort函数对选手进行排序。
5. 通过一次遍历计算每个选手的排名。
6. 查询指定分数的选手的排名。

以上代码修正了你原先代码中的一些错误,并进行了优化。希望这些改进对你有帮助。如果你还有任何问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 错在哪了啊