|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
达米奇同学的学校组织信息学竞赛模拟,发现了成绩并列如何排名是个难题。例如有四名选手的成绩分别为 50、80、50、30 分,则 80 分的选手为第一名,50 分的两名选手均为第二名,30 分的选手为第四名。老师请达米奇同学编写一个程序,计算一个选手在这种排名方式之下的名次(分数高的选手排前面)。
输入描述
第一行:一个整数 n
,表示参赛的选手数;
第二行:n
个整数,表示每位选手的成绩,两数之间用一个空格隔开;
第三行:一个整数,表示要查询名次的选手的成绩。
输出描述
一行:一个整数,表示该选手的名次。
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int n;int a[1000][2];int i,j,k,t,x;
- cin>>n;
- for(i=0;i<n;i++)
- {
- cin>>a[i][0];
- }
- for(i=0;i<n-1;n++)
- {
- for(j=0;j<n-1-i;j++)
- {
- if(a[j][0]<a[j+1][0])
- {
- t=a[j][0];a[j][0]=a[j+1][0];a[j+1][0]=t;
- }
- }
- }
- a[0][1]=1;
- for(i=1;i<n-1;i++)
- {
- if(a[i][0]==a[i-1][0])
- {
- a[i][1]=a[i-1][1];
- }
- else a[i][1]=a[i-1][1]+1;
- }
- cin>>x;
- for(i=0;i<n;i++)
- {
- if(a[i][0]==x){cout<<a[i][1];break;}
- }
- }
复制代码
这段代码有两个错误,分别是:
1. 在第二个for循环中,n++应该改为i++。
2. 在第二个for循环中,i应该从0开始,而不是从1开始。
正确代码如下:
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int n;
- int a[1000][2];
- int i,j,k,t,x;
- cin>>n;
- for(i=0;i<n;i++)
- {
- cin>>a[ i][0];
- }
- for(i=0;i<n-1;i++)
- {
- for(j=0;j<n-1-i;j++)
- {
- if(a[j][0]<a[j+1][0])
- {
- t=a[j][0];
- a[j][0]=a[j+1][0];
- a[j+1][0]=t;
- }
- }
- }
- a[0][1]=1;
- for(i=1;i<n;i++)
- {
- if(a[ i][0]==a[i-1][0])
- {
- a[ i][1]=a[i-1][1];
- }
- else a[ i][1]=a[i-1][1]+1;
- }
- cin>>x;
- for(i=0;i<n;i++)
- {
- if(a[ i][0]==x){
- cout<<a[ i][1];
- break;
- }
- }
- }
复制代码
|
|