题目: 编程实现查找优异生的功能——用户输入多个学生的成绩,输出总分最高的学生姓名和各科成绩
要求: 设计一个学生类(Student),包括
1)属性:姓名(name),数学成绩(mscore),语文成绩(cscore),英语成绩(escore);
2)方法:
- 构造方法,来构造每个具体的学生对象
- 计算总成绩方法getSum(self),返回三个成绩的和
- 获得优异生姓名,数学成绩,语文成绩,英语成绩的方法getBest(self),返回4个结果内容(优异生姓名,数学成绩,语文成绩,英语成绩)
输入格式:
通过4行输入:
第一行输入多个学生姓名,以空格分隔
第二行输入多个数学成绩,以空格分隔
第三行输入多个语文成绩,以空格分隔
第四行输入多个英语成绩,以空格分隔
注意:学生姓名个数要和成绩个数保持一致
输出格式:
在一行中,输出总分最高的学生及其各科科目成绩,以空格分隔。
输入样例:
在这里给出一组输入。例如:
Jack Tom Jim
95 84 32
90 75 45
85 90 67
输出样例:
在这里给出相应的输出。例如:
Jack 95 90 85
思路:主要是处理第一行的字符串输入,没有告诉具体的字符串有多少个,我猜了一下1e3可以过,题目不严谨,也没有说有没有相同的分数的人。
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
class stu
{
public:
char name[10];
int ms,cs,es;
public:
int getsum()
{
return ms+cs+es;
}
};
int main()
{
int sum1=0;
/*
char s[maxn];
while(gets(s)&&strcmp(s,"")!=0){}
*/
stu sum[N];
string s;
getline(cin,s);
string s1="";
int len=s.size();
for(int i=0;i<len;i++)
{
if(s[i]!=' ') s1+=s[i];
else if(s[i]==' ')
{
//cout<<s1;
//cout<<sum1<<" ";
strcpy(sum[sum1].name,s1.c_str());
//cout<<sum[sum1].name<<endl;
sum1++;
//cout<<s1<<endl;
s1.clear();
}
}
//cout<<sum1<<endl;
//cout<<s1<<endl;
//cout<<sum1<<" ";
//cout<<sum1<<endl;
strcpy(sum[sum1].name,s1.c_str());
//cout<<sum[sum1].name<<endl;
//cout<<sum1<<endl;
for(int i=0;i<=sum1;i++)
{
int x;
cin>>x;
sum[i].ms=x;
//cout<<sum[i].ms<<endl;
}
for(int i=0;i<=sum1;i++)
{
int x;
cin>>x;
sum[i].cs=x;
}
for(int i=0;i<=sum1;i++)
{
int x;
cin>>x;
sum[i].es=x;
}
int max1=-1,tempid=0;
for(int i=0;i<=sum1;i++)
{
int t=sum[i].getsum();
//cout<<sum[i].name<<endl;
//cout<<t<<endl;
if(max1<t)
{
max1=t;
tempid=i;
}
}
cout<<sum[tempid].name<<" ";
cout<<sum[tempid].ms<<" ";
cout<<sum[tempid].cs<<" ";
cout<<sum[tempid].es;
return 0;
}