题目
思路
因为每个学生都有名字和分数两个量,所以我们可以用结构体。先创建结构体,创建name(名字)和chengji(成绩)。开一个稍大一些的结构体数组。代码如下:
struct Student{
string name;
int chengji;
}a[25];
然后写比较函数。
比较规则:分数相同按名字字典序升序排,分数不同按分数降序排。代码如下:
bool f(Student x,Student y){
if(x.chengji==y.chengji){
return x.name<y.name;
}else{
return x.chengji>y.chengji;
}
}
接着进行输入。代码如下:
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].name>>a[i].chengji;
}
最后是比较和输出。
sort(a,a+n,f);
for(int i=0;i<n;i++){
cout<<a[i].name<<" "<<a[i].chengji<<endl;
}
完整代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct Student{
string name;
int chengji;
}a[25];
bool f(Student x,Student y){
if(x.chengji==y.chengji){
return x.name<y.name;
}else{
return x.chengji>y.chengji;
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].name>>a[i].chengji;
}
sort(a,a+n,f);
for(int i=0;i<n;i++){
cout<<a[i].name<<" "<<a[i].chengji<<endl;
}
return 0;
}
新手上路,请多多指教。