感觉这道题跟 P1093 有异曲同工之妙……(推广一下这道题的题解)。
这道题考结构体排序,至于具体的看上面的题解。
要注意的是 cmp 函数中要判断如果成绩相等就根据序号来排。
这里不过多废话,直接贴代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include<bits/stdc++.h> using namespace std; struct node{ string name; int qm,bj,lw,jxj,xh; char gb,xb; }a[114]; bool cmp(node x,node y){ if(x.jxj==y.jxj) return x.xh<y.xh; return x.jxj>y.jxj; } int n,c; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i].name>>a[i].qm>>a[i].bj>>a[i].gb>>a[i].xb>>a[i].lw; a[i].xh=i; if(a[i].qm>80&&a[i].lw>=1) a[i].jxj+=8000; if(a[i].qm>85&&a[i].bj>80) a[i].jxj+=4000; if(a[i].qm>90) a[i].jxj+=2000; if(a[i].qm>85&&a[i].xb=='Y') a[i].jxj+=1000; if(a[i].bj>80&&a[i].gb=='Y') a[i].jxj+=850; c+=a[i].jxj; } sort(a+1,a+n+1,cmp); cout<<a[1].name<<endl<<a[1].jxj<<endl<<c; }
|