错在哪了啊
达米奇同学的学校组织信息学竞赛模拟,发现了成绩并列如何排名是个难题。例如有四名选手的成绩分别为 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;}
}
} 这段代码有两个错误,分别是:
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;
}
}
}
以下是对你提供的代码进行修改和优化的建议:
#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]