P1051题解

这是本蒟蒻第一次写题解,如有错误,请在评论区积极指出,我不怕被骂

[题目传送门]


大体思路:

首先,我们来观察一下题目,挺长。

众所周知,题目越长题越简单。

题意:

首先,定义一个结构体数组。

然后根据奖学金的具体情况来编写 if 语句。

再把结构体数组 sort 排序。

最后输出,大功告成。

这道题这么水,应该都能做出来吧

先贴个 sort 语句的 cmp 函数(别忘加头文件 algorithm ):

1 bool cmp(mon a,mon b){
2     if(a.t!=b.t) return a.t>b.t;//总奖学金高的在前
3     return a.num<b.num;//序号小的在前
4 }

再直接上代码:

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 using namespace std;
 5 struct mon{
 6   string n;//n是名字
 7   int t,num;//t是总奖学金数,num是序号
 8 }stu[105];
 9 bool cmp(mon a,mon b){
10   if(a.t!=b.t) return a.t>b.t;
11   return a.num<b.num;
12 }//sort的cmp函数
13 int main(){
14   int n,sum=0;
15   cin>>n;
16   for(int i=1;i<=n;i++){
17     int q,b,l;
18     char x,w;//就是挨个定义,这两行也可以加到结构体里去
19     cin>>stu[i].n>>q>>b>>x>>w>>l;
20     stu[i].num=i;//序号就是i
21     if(q>80&&l>=1) stu[i].t+=8000;//院士奖学金
22     if(q>85&&b>80) stu[i].t+=4000;//五四奖学金
23     if(q>90) stu[i].t+=2000;//成绩优秀奖
24     if(q>85&&w=='Y') stu[i].t+=1000;//西部奖学金
25     if(b>80&&x=='Y') stu[i].t+=850;//班级贡献奖
26     sum+=stu[i].t;//总数
27   }
28   sort(stu+1,stu+n+1,cmp);//大小排序
29   cout<<stu[1].n<<endl<<stu[1].t<<endl<<sum;
30   return 0;//好习惯
31 }

但是,这种题解已经不知道被人发过多少次了。

所以,

能不能再想一种方法?

这个题不就是总数加起来比大小吗?

那我们可以用变量 maxs 来代表最大的奖学金,再用一个变量 maxn 来记名字。

这样也可以先输入的先判断,岂不是一举两得?

至少比上一个代码量少。

上代码(无需任何函数):

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 int main(){
 5     int n,q,b,l,s,maxs=-1,tot=0;
 6     char x,w;
 7     string name,maxn;
 8     cin>>n;
 9     for(int i=1;i<=n;i++){
10         s=0;//不要忘记每次都清零
11         cin>>name>>q>>b>>x>>w>>l;
12         if(q>80&&l>=1) s+=8000;
13         if(q>85&&b>80) s+=4000;
14         if(q>90) s+=2000;
15         if(q>85&&w=='Y') s+=1000;
16         if(b>80&&x=='Y') s+=850;//还是那一些
17         tot+=s;//总数
18         if(maxs<s){
19             maxs=s;
20             maxn=name;//奖学金最多的人名和奖学金数量
21         }
22     }
23     cout<<maxn<<endl<<maxs<<endl<<tot;
24     return 0;//华丽结束
25 }                            

总结:

这种题其实就是代码量稍大,它既没有像难题那样需要严密的算法,也没有像大部分代码需要注意细节。不要被这种题目的表象迷惑,只要认真读题、思考,就肯定能做出来。

这也是我写这篇题解的原因。

都看到这了,如果觉得还行就点个赞呗。毕竟这是本蒟蒻第一次写题解,球球了~~~

posted @ 2022-07-14 16:40  Rainforests  阅读(31)  评论(0编辑  收藏  举报