NYOJ_60 谁获得了最高奖学金

来源:互联网 发布:怎么下载安装mysql 编辑:程序博客网 时间:2024/05/17 03:27

题目地址

分析:

本题采用结构体的形式比较容易想到。
上次使用结构体还是大一上考完C语言的时候,想想惭愧!平时编程还是太少!

心得:

做完不看推荐代码等于白做!
判断输入是否为真  bool istrue= str ==“Y”;
姓名:直接用 string 定义,不需要用字符数组。

代码:

#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;}


官方优秀代码:




0 0