|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述
一年一度的江苏省小学生程序设计比赛开始了,组委会公布了所有学生的成绩,成绩按分数从高到底排名,成绩相同按年级从低到高排。现在主办单位想知道每一个排名的学生前,有几位学生的年级低于他。
输入描述
第 1 行只有一个正整数 n
(1≤n≤200
),表示参赛的学生人数。
第 2∼n+1
行,每行有两个正整数 s
(0≤s≤400
)和 g
(1≤g≤6
),之间用一个空格隔开,其中第 i+1
行的第一个数 s
表示第 i
个学生的成绩,第 i+1
行的第二个数 g
表示第 i
个学生的年级。
输出描述
输出 n
行,每行只有一个正整数,其中第 i
行的数 k
表示排第 i
名的学生前面有 k
个学生排名比他高,且年级比他低。
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int n,a[200][2],i,j,t;
- cin>>n;
- for(i=0;i<n;i++)
- {
- cin>>a[i][0]>>a[i][1];
- }
- for(i=0;i<n-1;i++)
- {
- for(j=0;j<n-i-1;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;
- }
- }
- }
- for(i=0;i<n-1;i++)
- {
- for(j=0;j<n-i-1;j++)
- {
- if((a[j][0]==a[j+1][0])&&(a[j][1]>a[j+1][1]))
- t=a[j][1];a[j][1]=a[j+1][1];a[j+1][1]=t;
- }
- }
- for(i=0;i<n;i++)
- {
- int s=0;
- for(j=0;j<i;j++)
- {
- if(a[i][1]>a[j][1]) s++;
- }
- cout<<s<<endl;
- }
- }
复制代码
这段代码的问题在于第二个排序的循环中,缺少了一对大括号,导致if语句只作用于t=a[j][1]这一行,而不包括后面的两行交换操作。
正确的代码应该是这样的:
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int n,a[200][2],i,j,t;
- cin>>n;
- for(i=0;i<n;i++)
- {
- cin>>a[ i][0]>>a[ i][1];
- }
- for(i=0;i<n-1;i++)
- {
- for(j=0;j<n-i-1;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;
- }
- }
- }
- for(i=0;i<n-1;i++)
- {
- for(j=0;j<n-i-1;j++)
- {
- if((a[j][0]==a[j+1][0])&&(a[j][1]>a[j+1][1]))
- {
- t=a[j][1];a[j][1]=a[j+1][1];a[j+1][1]=t;
- }
- }
- }
- for(i=0;i<n;i++)
- {
- int s=0;
- for(j=0;j<i;j++)
- {
- if(a[ i][1]>a[j][1]) s++;
- }
- cout<<s<<endl;
- }
- }
复制代码
这样修改后,代码就能正确地按照题目要求输出每个学生前面有几个学生排名比他高且年级比他低了。
|
|