NOIP 2007 普及组 复赛 scholar 奖学金
1.采用结构体,该题思路就会比较清晰。
2.因总数不超过300,因条件考虑较多,采用冒泡排序处理,代码处理起来比较简单。
3.按照题目要求进行程序书写,即可,注意单独写一个交换函数,可以减少代码量。
附上AC代码,编译环境Dev-C++4.9.9.2
#include <stdio.h>
struct node{
int i;//序号
int yu;//语文
int shu;//数学
int ying;//英语
int zong;//总分
}stu[300+10],stu_t;
void swap(int i,int j){
stu_t=stu[i];
stu[i]=stu[j];
stu[j]=stu_t;
}
int main(){
int n;
int i,j,yu,shu,ying;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d%d%d",&yu,&shu,&ying);
stu[i].i=i;
stu[i].yu=yu;
stu[i].shu=shu;
stu[i].ying=ying;
stu[i].zong=yu+shu+ying;
}
for(i=1;i<=n;i++)//自大到小排序
for(j=i+1;j<=n;j++)
if(stu[i].zong<stu[j].zong)
swap(i,j);
else if(stu[i].zong==stu[j].zong)
if(stu[i].yu<stu[j].yu)
swap(i,j);
else if(stu[i].yu==stu[j].yu)
if(stu[i].i>stu[j].i)
swap(i,j);
for(i=1;i<=5;i++)
printf("%d %d\n",stu[i].i,stu[i].zong);
return 0;
}
1167

被折叠的 条评论
为什么被折叠?



