今天重点不是C语言,而是这个:
为过英语四级考试而奋斗;
问题描述
小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你,希望你能帮他解决这个问题。
输入格式
第一行包含一个正整数N,表示有个人参加了考试。接下来N行,每行有一个字符串和一个正整数,分别表示人名和对应的成绩,用一个空格分隔。
输出格式
输出一共有N行,每行一个字符串,第i行的字符串表示成绩从高到低排在第i位的人的名字,若分数一样则按人名的字典序顺序从小到大。
样例输入
3
aaa 47
bbb 90
ccc 70
这题本来就很简单,但我忽视了上面的那句话,导致无法通过;
代码:
#include<bits/stdc++.h>
using namespace std;
struct student
{
int x;
char name[100];
}a[10000],b;
int main()
{
int n,i,j;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i].name>>a[i].x;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j].x<a[j+1].x)
{
b=a[j];
a[j]=a[j+1];
a[j+1]=b;
}
else if(a[j].x==a[j+1].x)
{
if(strcmp(a[j].name,a[j+1].name)>0)
{
b=a[j];
a[j]=a[j+1];
a[j+1]=b;
} //错误的关键所在
}
}
}
for(i=0;i<n;i++)
{
cout<<a[i].name<<"\n";
}
return 0;
}