#include<iostream> #include<string.h> using namespace std; struct Student { char *name ; float finalExamScore ; float classJudgeScore ; char isClassLeader ; char isWestern ; int paperNum ; float bouns ; }; void countBonus(Student &p) //加引用 { if(p.finalExamScore >80 && p.paperNum >= 1) p.bouns+=8000; if(p.finalExamScore>85 && p.classJudgeScore >80) p.bouns+= 4000; if(p.finalExamScore >90 ) p.bouns += 2000; // if(strcmp("Y",p.isWestern)==0 && p.finalExamScore >85) p.bouns+=1000; // if(strcmp("Y",p.isClassLeader)==0 &&p.classJudgeScore >80) p.bouns+= 850; if('Y'==p.isWestern && p.finalExamScore >85) p.bouns+=1000; if('Y'==p.isClassLeader &&p.classJudgeScore >80) p.bouns+= 850; } void SelectSort(Student *p ,int n) { int i,j,min; Student temp; for(int i=0;i<n;i++) //n-1次 { min = i; for(j=i+1;j<n;j++) { if(p[min].bouns>= p[j].bouns) //稳定的 如果 a 先进 则 a靠后(大) min = j; } if(min != i) { temp = p[i]; p[i] = p[min]; p[min] = temp; } } } int main() { int n; cin>>n; while(n--) { int num; float bouns=0; cin>>num; Student stu[num]; //结构数组 for(int i=0;i<num;i++) { stu[i].name = new char[20]; // stu[i].isClassLeader = new char [3]; // stu[i].isWestern = new char [3]; cin>>stu[i].name>>stu[i].finalExamScore>>stu[i].classJudgeScore>>stu[i].isClassLeader>>stu[i].isWestern>>stu[i].paperNum; stu[i].bouns = 0; countBonus(stu[i]); } SelectSort(stu,num); //从小到大排序 for(int i=0;i<num;i++) { bouns += stu[i].bouns; } cout<<stu[num-1].name<<" "<<endl; cout<<stu[num-1].bouns<<" "<<endl; cout<<bouns<<endl; } return 0; }
原文:http://blog.csdn.net/think_ycx/article/details/46315113