题目地址
分析:
本题采用结构体的形式比较容易想到。
上次使用结构体还是大一上考完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;
}