这题本身没啥好说的,非常简单,要说的是C++的一个特性。
这个题写的比较复杂,其实不用这么多空间,也不要排序,直接线性处理就行了。但是我写题写习惯了,又接着搞排序,就出了这么个问题。
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 34 | #include<bits/stdc++.h> using namespace std; int n; struct stu{ string name; int fs,cs; char sl,wp; int an; int money; stu(){ money=0; } bool operator < (const stu& s2){ return money>=s2.money; } }stus[105]; int sum=0; int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>stus[i].name>>stus[i].fs>>stus[i].cs>>stus[i].sl>>stus[i].wp>>stus[i].an; for(int i=1;i<=n;i++){ if(stus[i].fs>80&&stus[i].an>=1)stus[i].money+=8000; if(stus[i].fs>85&&stus[i].cs>80)stus[i].money+=4000; if(stus[i].fs>90)stus[i].money+=2000; if(stus[i].fs>85&&stus[i].wp=='Y')stus[i].money+=1000; if(stus[i].cs>80&&stus[i].sl=='Y')stus[i].money+=850; sum+=stus[i].money; } sort(stus+1,stus+n+1); cout<<stus[1].name<<endl; cout<<stus[1].money<<endl; cout<<sum; } |
问题就出在比较的>=号上。查找了资料(地址http://blog.sina.com.cn/s/blog_532f6e8f01014c7y.html),我没细看,总结出来就是sort的cmp不能用带=号的。这个问题我最后就用stable_sort解决了。好用。代码如下:
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<iostream> #include<algorithm> using namespace std; int n; struct stu{ string name; int fs,cs; char sl,wp; int an; int money; bool operator < (const stu& s2) const{ return money>s2.money; } }stus[205]; int sum1=0; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>stus[i].name>>stus[i].fs>>stus[i].cs>>stus[i].sl>>stus[i].wp>>stus[i].an; } for(int i=1;i<=n;i++){ if(stus[i].fs>80&&stus[i].an>=1)stus[i].money+=8000; if(stus[i].fs>85&&stus[i].cs>80)stus[i].money+=4000; if(stus[i].fs>90)stus[i].money+=2000; if(stus[i].fs>85&&stus[i].wp=='Y')stus[i].money+=1000; if(stus[i].cs>80&&stus[i].sl=='Y')stus[i].money+=850; sum1+=stus[i].money; } stable_sort(stus+1,stus+n+1); cout<<stus[1].name<<endl; cout<<stus[1].money<<endl; cout<<sum1; } |