1566 - 成绩排序3
用一维数组存储学号和成绩,然后,按成绩排序输出。
<br />
题目输入
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。<br />
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
<br />
题目输出
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。<br />
如果学生的成绩相同,则按照学号的大小进行从小到大排序。
<br />
输入/输出样例
题目输入
1 1 68 3 1 1 2 70 3 25
题目输出
1 68 1 1 3 25 2 70
C语言解答
#include <stdio.h> #include <stdlib.h> struct student { int num; int score; }; int main() { struct student students[200]; int n,i,j; struct student t; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { scanf("%d %d",&students[i].num,&students[i].score); } for(i=0;i<n-1;i++) { for(j=0;j<n-i-1;j++) { if(students[j].score>students[j + 1].score) { t=students[j]; students[j]=students[j+1]; students[j+1]=t; } else if(students[j].score==students[j+1].score) { if(students[j].num>students[j+1].num) { t=students[j]; students[j]=students[j+1]; students[j+1]=t; } } } } for(i=0;i<n;i++) { printf("%d %d\n",students[i].num,students[i].score); } } return 0; }
C++解答
#include <stdio.h> #include <stdlib.h> struct student { int number; int score; }; int main() { struct student students[101]; int n, i, j; struct student temp; while(scanf("%d",&n) != EOF) { //接收数据 for(i = 0; i < n; i++) { scanf("%d%d",&students[i].number,&students[i].score); } //冒泡排序 for(i = 0; i < n - 1; i ++) { for(j = 0; j < n - i - 1; j ++) { if(students[j].score > students[j + 1].score) { temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; }else if(students[j].score == students[j + 1].score) { if(students[j].number > students[j + 1].number) { temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } } //输出排序结果 for(i = 0; i < n; i ++) { printf("%d %d\n",students[i].number,students[i].score); } } return 0; }