申请发题解
  • 板块工单反馈版
  • 楼主kuaihuoya
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/4/14 13:45
  • 上次更新2023/10/28 03:46:41
查看原帖
申请发题解
608785
kuaihuoya楼主2022/4/14 13:45

@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*/

2022/4/14 13:45
加载中...