[NOIP2007 普及组] T1 奖学金 AC过程
#include <bits/stdc++.h>
using namespace std;
struct stu{
int ch,ma,en;
int sum;
int id;
}a[310];//结构体储存学生数据。
bool cmp(stu a,stu b){//排序函数
if(a.sum!=b.sum){
return a.sum>b.sum;
}else{
if(a.ch!=b.ch){
return a.ch>b.ch;
}else{
return a.id<b.id;
}
}
}
int n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d%d",&a[i].ch,&a[i].ma,&a[i].en);
a[i].sum=a[i].ch+a[i].ma+a[i].en;
a[i].id=i;
}//输入
for(int i=1;i<=5;i++){
for(int j=i+1;j<=n;j++){
if(cmp(a[j],a[i])){
swap(a[i],a[j]);
}
}
}//选择排序,因为n最大是300,时间复杂度不会过1秒。
for(int i=1;i<=5;i++){
printf("%d %d\n",a[i].id,a[i].sum);
}
}//输出。
这是一道简单的排序题,可以用重构来写,更简单,我这里用的是排序函数。
注意多关键字即可。