题目:期中考试已经结束了,计算机系将要进行年级成绩排名。排名的规则如下:
- 以期中考试的平均成绩为排名依据(满分为100分);
- 对学生A,如果一共有K个学生的平均成绩比A的平均成绩高,则学生A的年级排名为K+1;
- 如果学生A和学生B的平均成绩相同,则他们的排名相同。
希望你能编写一个程序来实现排名和统计名次。
输入格式
第一行为一个整数N(1<=N<=1000),表示学生的人数。随后有N行,每行有两个非负整数描述一个学生的信息,依次为学号和平均成绩。
输出格式
输出共有N行,按照名次从高到低每行输出一名学生的信息(若名次相同,则学号小的先输出),依次为:名次,学号,平均成绩,其间用一个空格隔开。
输入样例
样例一
5
1000 95
1001 100
1002 94
1006 95
1007 100
样例二
20
2191 37
5618 47
1146 15
6029 4
2757 16
5968 83
1205 46
7473 13
2301 35
1343 1
6113 31
4238 15
1709 43
4330 47
8444 5
3282 9
2549 68
5415 75
6875 50
1757 10
输出样例
样例一
1 1001 100
1 1007 100
3 1000 95
3 1006 95
5 1002 94
样例二
1 5968 83
2 5415 75
3 2549 68
4 6875 50
5 4330 47
5 5618 47
7 1205 46
8 1709 43
9 2191 37
10 2301 35
11 6113 31
12 2757 16
13 1146 15
13 4238 15
15 7473 13
16 1757 10
17 3282 9
18 8444 5
19 6029 4
20 1343 1
我的答案:#include <stdio.h>
#define N 1000
int main() {
int n, i, j, t, k, m;
int a[N], c[N], b[N];
scanf("%d\n", &n);
for (i = 0; i <= n - 1; i++) {
scanf("%d %d\n", &b[i], &a[i]);
}
for (i = 0; i <= n - 1; i++) {
for (j = 0; j <= n - i - 1; j++) {
if (a[j] < a[j + 1]) {
t = a[j + 1];
a[j + 1] = a[j];
a[j ] = t;
m = b[j + 1];
b[j + 1] = b[j ];
b[j] = m;
} else {
t = a[j ];
a[j ] = a[j + 1];
a[j + 1] = t;
m = b[j ];
b[j ] = b[j + 1];
b[j + 1] = m;
}
}
}
k = 1;
c[0] = 1;
for (i = 1; i <= n; i++) {
if (a[i] != a[i - 1]) {
c[i] = ++k;
} else {
c[i] = k;
k = k++;
}
}
for (i = 0; i < n; i++) {
printf("%d %d %d\n", c[i], b[i], a[i]);
}
return 0;
}
运行答案出错,两个小时没找出来bug在哪里