问题标题: 酷町堂:1485

0
0
已解决
李宜和
李宜和
高级启示者
高级启示者

1485   酷町堂教务****1

经验值:0 时间限制:1000毫秒

题目描述 Description

酷町堂举办了一次阶段测试,测试总共有4题,该次阶段测试共有n位同学参加,每位同学的姓名、年龄以及每一道题目对应的得分已知,请聪明的你帮酷町堂做一个教务****,分别输出每位同学姓名、年龄、以及每位同学的总分,并在最后一行输出总数最高的同学姓名,如果总分一样,则输出最高分中最先输入的学生姓名。

输入描述 Input Description

输入为n+1行:
第一行为参加测试的学生数n(n≤100);
之后的n行,每一行分别为每位同学的姓名、年龄以及每一题对应的得分,中间用单个空格隔开;

输出描述 Output Description

输出为n+1行:
前n行为每位同学的姓名、年龄以及该同学得到的总分,中间用单个空格隔开;
最后一行为总分最高同学的姓名,如果总分一样,则输出最高分中最先输入的学生姓名。

样例输入 Sample Input

3 Zhangsan 12 100 90 80 50 Lisi 12 50 80 50 60 Wangwu 13 90 100 50 80

样例输出 Sample Output

Zhangsan 12 320 Lisi 12 240 Wangwu 13 320 Zhangsan

 

 

错误代码:

#include<iostream> 
using namespace std; 
long long nm,sum[105],maxn=-0x3f3f3f3f,cnt;
struct a{
    long long year,one,two,three,four;
    string name;
}n[105];
int main(){ 
    cin>>nm;
    for(int i=1;i<=nm;i++){
        cin>>n[i].name>>n[i].year>>n[i].one>>n[i].two>>n[i].three>>n[i].four;
        sum[i]+=n[i].one+n[i].two+n[i].three+n[i].four; 
    }
    for(int i=1;i<=nm;i++){
        if(sum[i]>maxn){
            maxn=sum[i];
        }
    }
    for(int i=1;i<=nm;i++){
        cout<<n[i].name<<" "<<n[i].year<<" "<<sum[i]<<endl;
    }
    for(int i=1;i<=nm;i++){
        if(sum[i]=maxn){
            cout<<n[i].name;
        }
    }
    return 0; 
}

能告诉我思路和哪错了吗


0
已采纳
王文博
王文博
缔造者之神
缔造者之神

这个做法似乎有点麻烦

你肯定学过结构体排序(sort的那种)

还有结构体函数

struct stu
{
    string name;
    int b,c[5],id;
    int sum()
    {
        return c[1]+c[2]+c[3]+c[4];
    }
}a[101];
bool cmp(stu a,stu b)
{
    if(a.sum()!=b.sum()) return a.sum()>b.sum();
    return a.id<b.id;
}

一定要学以致用啊!

0
0
0
朱小川
朱小川
缔造者
缔造者

题目还说:如果总分一样,则输出最高分中最先输入的学生姓名

所以:要在代码中加特判(用return)

我要回答