牛客-清华-01-成绩排序
问题描述
输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。
例示:
输入:
jack 70
peter 96
Tom 70
smith 67
输出:
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67从低到高
smith 67
Tom 70
jack 70
peter 96
输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1
输入
3
0
fang 90
yang 50
ning 70
输出
fang 90
ning 70
yang 50
代码
1 | //错误代码 |
上边代码,不知道哪里出错,oj上提示指针溢出。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54/**
*
* 直接插入排序,ac
*/
using namespace std;
struct Node {
string name;
float scor;
} stu[1000];
int main() {
int n, m;
while(cin>>n) {
cin>>m;
for(int i = 0; i < n; i ++) {
string s;
float a;
cin>>s>>a;
stu[i].name = s;
stu[i].scor = a;
}
if(m==0) { //降序
Node tem;
for(int i = 1,j; i < n; i ++) {
tem = stu[i];
for(j = i; j>0&& stu[j-1].scor<tem.scor; j--) {
stu[j] = stu[j-1];
}
stu[j] = tem;
}
} else { //升序
Node tem;
for(int i = 1,j; i < n; i ++) {
tem = stu[i];
for(j = i; j>0&& stu[j-1].scor>tem.scor; j--) {
stu[j] = stu[j-1];
}
stu[j] = tem;
}
}
for(int i = 0; i < n; i ++) {
cout<<stu[i].name<<" "<<stu[i].scor<<endl;
}
}
return 0;
}