题目描述
输入任意序列,可以获得成绩从高到低或从低到高的排序,相同成绩都按先录入者排列在前的规则处理。
输入
输入多行,首先输入要排序的人的个数,然后输入排序方法0(降序)或1(升序),再分别输入他们的名字和成绩,以一个空格隔开。
输出
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开。
样例输入:
3
0
fang 90
yang 50
ning 70
样例输出
fang 90
ning 70
yang 50
思路:
- 用结构体定义学生姓名和成绩
- 输入排序的人的个数
- 输入排序方法0或1
- 冒泡排序,判断排序方法是0还是1,分别按照降序或升序排序
- 输出结果
#include <stdio.h>
#include <string.h>
struct Student{
char name[50];
int score;
}a[100];
int main(){
int n,method;
while(scanf("%d%d",&n,&method)!=EOF){
for(int i=0;i<n;i++){
scanf("%s%d",&a[i].name,&a[i].score);
}
struct Student temp;
for(int i=0;i<n;i++){
for(int j=0;j<n-i-1;j++){
//降序
if(method == 0){
if(a[j].score < a[j+1].score){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}else{//升序
if(a[j].score > a[j+1].score){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
for(int i=0;i<n;i++){
printf("%s %d\n",a[i].name,a[i].score);
}
}
return 0;
}