https://www.luogu.org/problem/P1051
#include<bits/stdc++.h> using namespace std; struct node { string xm;//姓名 int qm,bj;//期末平均成绩,班级评议成绩 char bgb,xb;//是否是学生干部,是否是西部省份学生 int lw;//发表的论文数 int ans;//个人所获的奖金数 int num;//序号数,因为题目要求两个人所获的奖金数相同时,输出先出现的,即序号较靠前的(较小的) } a[101]; int n,tot=0;//tot记录总的钱的数目 bool cmp(node x,node y) { if(x.ans==y.ans)return x.num<y.num;// 奖学金数从大到小排序 else return x.ans>y.ans;//奖金相同时按序号数从小到大排序 } int main() { scanf("%d",&n); for(int i=1; i<=n; i++) { cin>>a[i].xm>>a[i].qm>>a[i].bj>>a[i].bgb>>a[i].xb>>a[i].lw; if(a[i].qm>80&&a[i].lw>=1) a[i].ans+=8000; if(a[i].qm>85&&a[i].bj>80) a[i].ans+=4000; if(a[i].qm>90) a[i].ans+=2000; if(a[i].xb=='Y'&&a[i].qm>85) a[i].ans+=1000; if(a[i].bj>80&&a[i].bgb=='Y') a[i].ans+=850; a[i].num=i; tot+=a[i].ans;//tot为总的奖学金数 } sort(a+1,a+n+1,cmp); cout<<a[1].xm<<endl<<a[1].ans<<endl<<tot; return 0; }
#include<bits/stdc++.h> using namespace std; int main() { int n,score1,score2,sum=0,max=0,total=0,x,i; char a,b; string name,maxn; cin>>n; for(i=1; i<=n; i++) { cin>>name>>score1>>score2>>a>>b>>x; if(score1>80 && x>0)//判断是否获得院士奖学金 sum+=8000; if(score1>85 && score2>80)//判断是否获得五四奖学金 sum+=4000; if(score1>90)//判断是否获得成绩优秀奖 sum+=2000; if(score1>85 && b=='Y')//判断是否获得西部奖学金 sum+=1000; if(score2>80 && a=='Y')//判断是否获得班级贡献奖 sum+=850; total+=sum;//累加奖学金 if(sum>max)//找出最牛学生 maxn=name,max=sum;//sum的用处 sum=0; } cout<<maxn<<endl<<max<<endl<<total; return 0; }