Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 315 Solved: 124
Description
现在有个n个同学的姓名和成绩,按照分数从大到小,分数相同的按照名字的字典序从小到大排列。
Input
多组测试,处理到文件末尾。一个数n,接下来是n(n<=100)行,每行一个姓名,成绩
Output
排序的结果
Sample Input
4 zcc 59 ayer 90 huhu 90 zhang 0
Sample Output
ayer 90 huhu 90 zcc 59 zhang 0
题解:
字典序的概念:
strcmp()函数用法:#include<cstring> #include<string.h>
代码:之前WA的原因是没有while(cin>>t) QQ
#include<bits/stdc++.h>
using namespace std;
#define MAX 20
struct Student
{
char name[MAX];
double grade;
} s[105];
bool compare(const Student s1,const Student s2)
{
if(s1.grade>s2.grade)
return true;
else if(s1.grade==s2.grade)
{
if(strcmp(s1.name,s2.name)>0)
return false;
else
return true;
}
else
return false;
}
int main()
{
int t;
while(cin>>t)
{
for(int i=0; i<t; i++)
{
cin>>s[i].name>>s[i].grade;
}
sort(s,s+t,compare);
for(int i=0; i<t; i++)
cout<<s[i].name<<" "<<s[i].grade<<endl;
}
return 0;
}