@chen_zhe 我想提交P1093 [NOIP2007 普及组] 奖学金的题解,我看了许多这题的题解,觉得太麻烦了,就有一种更简单、新颖的方法,具体内容如下:
/*这题非常的有意思,但是重点就在于怎么排序上,所以最简洁的方法就是合并一下,但是学号要相反处理,剩余的找出前五个大的就行了(对了,忘了输出……)
#include<bits/stdc++.h> //还是万能头文件香
using namespace std;
int main()
{
int n,i,j,b1,b2,b3,a[301],b[301],maxn,maxm;
memset(a,-1,sizeof(a));
cin>>n;
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&b1,&b2,&b3);
int m=b1+b2+b3;
int k=(m*100000)+(b1*1000)+(100-i); //把几个值合并
b[i]=m;
a[i]=k;
}
for(i=1;i<=5;i++) //找出前五个大的
{
maxn=0;
for(j=1;j<=n;j++) //打擂台
{
if(a[j]>maxn)
{
maxn=a[j];
maxm=j;
}
}
cout<<maxm<<' '<<b[maxm]<<endl;
a[maxm]=-1; //标记,以免重复
}
return 0; //好习惯
}
好了,这题就这么结束了,根本不需要那么多if*/