3562 - 模拟5
某次运动会上一共有n(n最大为50)名参赛运动员,
要求手动输入该n名运动员的编号与成绩,并按照从高分到低分的顺序输出这些运动员的编号与成绩。(当分数相等时,序号按从小大排列)
<b>提示:</b>可以使用两个数组并使用排序方法 <b><span></span></b>
Input
输入有多组样例。
输入一个整数n,接下来输入n行,每行两个整数编号和成绩a,b。
Output
输出排序后的编号和成绩。
Examples
Input
3 1 2 2 3 3 4 5 1 87 2 75 3 90 4 88 5 70
Output
3 4 2 3 1 2 3 90 4 88 1 87 2 75 5 70
Solution C
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <time.h> int main() { // freopen("in","r",stdin); // freopen("out","w",stdout); int a[50][2]; int n; int i,j,k; while(scanf("%d",&n)!=EOF) { for (i=0;i<n;i++) scanf("%d%d",&a[i][1],&a[i][2]); for (i=0;i<n-1;i++) for (j=0;j<n-1-i;j++) if (a[j][2]<a[j+1][2]) { k=a[j][1]; a[j][1]=a[j+1][1]; a[j+1][1]=k; k=a[j][2]; a[j][2]=a[j+1][2]; a[j+1][2]=k; } for (i=0;i<n;i++) printf("%d %d\n",a[i][1],a[i][2]); } return 0; }
Solution C++
#include<stdio.h> int main() { int a[50][3],n,i,j,t; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) scanf("%d%d",&a[i][1],&a[i][2]); for(i=1;i<=n-1;i++) for(j=1;j<=n-i;j++) if(a[j][2]<a[j+1][2]) { t=a[j][1]; a[j][1]=a[j+1][1]; a[j+1][1]=t; t=a[j][2]; a[j][2]=a[j+1][2]; a[j+1][2]=t; } for(i=1;i<=n;i++) printf("%d %d\n",a[i][1],a[i][2]); } }