谁获得了最高奖学金
日期:2015-06-06 22:12:56
最后更新日期:2015-06-06 22:12:56
解:
此题主要读懂题目,这里为了练习CPP而写。
[code lang="cpp"]
#include<cstdio>
#include<cstdlib>
#include<string>
#include<iostream>
using namespace std;
class Student{
public:
Student(char *name,char west,char cadres,int papers,int avg,int classavg):m_name(name),m_west(west),m_cadres(cadres),m_papers(papers),m_scoreavg(avg),m_scoreclass(classavg){
}
int getScholarship(){
return Scholar0()+Scholar1()+Scholar2()+Scholar3()+Scholar4();
}
string& getName(){
return m_name;
}
private:
int Scholar0(){ //院长奖学金
int r=0;
if (m_scoreavg>80&&m_papers>0){
r=8000;
}
return r;
}
int Scholar1(){ //54奖学金
int r=0;
if (m_scoreavg>85 && m_scoreclass>80){
r=4000;
}
return r;
}
int Scholar2(){ //成绩优秀奖学金
int r=0;
if (m_scoreavg>90){
r=2000;
}
return r;
}
int Scholar3(){ //西部奖学金
int r=0;
if ('Y'==m_west && m_scoreavg>85){
r=1000;
}
return r;
}
int Scholar4(){ //班级贡献奖学金
int r=0;
if ('Y'==m_cadres && m_scoreclass>80){
r=850;
}
return r;
}
string m_name;
char m_west;
char m_cadres;
char m_papers;
int m_scoreavg;
int m_scoreclass;
};
int solve(){
int t;
char buf[64];
scanf("%d",&t);
while (t--){
int n;
scanf("%d",&n);
int total=0,max=0;
string name;
for (int i=0; i<n; ++i){
int avg,classavg,num;
char west,cadres;
scanf("%s %d %d %c %c %d",buf,&avg,&classavg,&cadres,&west,&num);
Student s(buf,west,cadres,num,avg,classavg);
int tmp= s.getScholarship();
total += tmp;
if (tmp>max){
name=s.getName();
max=tmp;
}
}
cout<<name<<endl<<max<<endl<<total<<endl;
}
return 0;
}
int main()
{
solve();
return 0;
}
[/code]