【题目描述】
给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
【输入】
第一行为n (0 < n < 20),表示班里的学生数目;
接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。
【输出】
把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。
【输入样例】
4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28
【输出样例】
Joey 92
Hanmeimei 90
Kitty 80
Tim 28
用了两个数组,比较一个的大小排序,另一个跟着变化
#include<bits/stdc++.h> using namespace std; int b[5001];//放值 char a[5001][20];//放人名 int main() { int i=0,j,k=0,n,m,t; char tmp[20]; scanf("%d%d",&n); for(i=0;i<n;i++) { scanf("%s %d",&a[i],&b[i]); } for(i=0;i<n-1;i++)//前面是输入,从这是比较,以数值组比较,人名组跟着变动 for(j=i+1;j<n;j++) { if(b[j]>b[i])//成绩从高到低对成绩单排序输出 { strcpy(tmp,a[i]); strcpy(a[i],a[j]); strcpy(a[j],tmp); k=b[i]; b[i]=b[j]; b[j]=k; } else if(b[j]==b[i]&&(strcmp(a[j],a[i])<0))//相同分数则名字字典序小的在前 { strcpy(tmp,a[i]); strcpy(a[i],a[j]); strcpy(a[j],tmp); } } for(j=0;j<n;j++) printf("%s %d\n",a[j],b[j]); return 0; }