标题:新手求助,不知道哪里错了,去高教
只看楼主
zpf2014
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-8-14
 问题点数:0 回复次数:2 
新手求助,不知道哪里错了,去高教

【问题描述】
 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。按总分从高到低排序,
 任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。
【输入格式】
第1行为一个正整数n,表示该校参加评选的学生人数。
第2到n+1行,每行有3个用空格隔开的数字,每个数字都在0到100之间。第j 行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减1)。 所给的数据都是正确的,不必检验。
【输出格式】
共有5行,每行是两个用空格隔开的正整数, 依次表示前5名学生的学号和总分。
【输入样例】
6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
输出样例
6 265
4 264
3 258
2 244
1 237



#include<bits/stdc++.h>
using namespace std;
double c[101],m[101],e[101],z[301];
int main(){
    int n,b[101];
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>c[i]>>m[i]>>e[i];
    for(int i=1;i<=n;i++)
    {
        z=0;
        z[i]=c[i]+m[i]+e[i];
    }
    for(int i=1;i<=n;i++)
       for(int j=n;j>=i+1;j--)
         if(z[j]>z[j-1])
        {
          int t;
          t=z[j];
          z[j]=z[j-1];
          z[j-1]=t;
          int p;
          p=b[j];
          b[j]=b[j-1];
          b[j-1]=p;
        }   
    for(int i=2;i<=n;i++)
    cout<<z[i]<<' '<<b[i];
    return 0;
}
搜索更多相关主题的帖子: 学生 总分 输入 int for 
2018-08-14 12:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
我想不通,为什么不肯贴出原始链接?比如 https://www.
不贴也就算了,为什么必要的信息都不肯贴全?比如
如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面
第 111 行为一个正整数 n(≤300)
而且,以上提到的两点在你的代码中都没有体现!!!

程序代码:
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;

struct score
{
    unsigned id;
    unsigned chinese;
    unsigned mathematics;
    unsigned english;

    bool operator>( const score& s ) const
    {
        if( chinese+mathematics+english > s.chinese+s.mathematics+s.english )
            return true;
        if( chinese+mathematics+english < s.chinese+s.mathematics+s.english )
            return false;

        if( chinese > s.chinese )
            return true;
        if( chinese < s.chinese )
            return false;

        return id < s.id;
    }

    friend std::istream& operator>>( std::istream& is, score& s )
    {
        return is >> s.chinese >> s.mathematics >> s.english;
    }
};

int main( void )
{
    size_t n;
    cin >> n;

    score buf[300];
    for( size_t i=0; i!=n; ++i )
    {
        buf[i].id = i+1;
        cin >> buf[i];
    }

    partial_sort( buf, buf+5, buf+n, std::greater<score>() );

    for( size_t i=0; i!=5; ++i )
    {
        cout << buf[i].id << ' ' << (buf[i].chinese+buf[i].mathematics+buf[i].english) << '\n';
    }
}

2018-08-14 15:04
louyongyong
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-11-22
得分:0 
#include<iostream>
using namespace std;
struct Stu_score
{
    int CHN, METH, ENG,Total_Score;
    int SN;


};
int main() {
    int Total_stu;
    cout << "请输入学生总数:" << endl;
    cin >> Total_stu;
    Stu_score *Stus = new Stu_score[Total_stu];
    int i = 0;
    while (i < Total_stu)
    {
        cin >> Stus[i].CHN >> Stus[i].ENG >> Stus[i].METH;
        Stus[i].Total_Score = Stus[i].CHN + Stus[i].ENG + Stus[i].METH;
        Stus[i].SN = i + 1;
        i++;
    }
    for (int i = 0; i < Total_stu; i++)
    {
        for (int j = 0; j < Total_stu - 1; j++)
        {
            Stu_score t;
            if (Stus[j].Total_Score < Stus[j + 1].Total_Score)
            {
                t = Stus[j];
                Stus[j] = Stus[j + 1];
                Stus[j + 1] = t;
            }
        }
    }
        

    for (int i = 0; i < Total_stu; i++)
    {
        for (int j = 0; j < Total_stu - 1; j++)
        {
            if (Stus[j].Total_Score == Stus[j + 1].Total_Score)
            {
                if (Stus[j].CHN < Stus[j + 1].CHN)
                {
                    Stu_score t;
                    t = Stus[j];
                    Stus[j] = Stus[j + 1];
                    Stus[j + 1] = t;
                }
            }
        }
    }
    for (int i = 0; i < Total_stu; i++)
    {
        for (int j = 0; j < Total_stu - 1; j++)
        {
            if ((Stus[j].Total_Score == Stus[j + 1].Total_Score) && (Stus[j].CHN == Stus[j + 1].CHN))
            {
                if (Stus[j].SN > Stus[j + 1].SN)
                {
                    Stu_score t;
                    t = Stus[j];
                    Stus[j] = Stus[j + 1];
                    Stus[j + 1] = t;
                }
            }
        }
    }
        for (int i = 0; i < 5; i++)
        {
            cout << Stus[i].SN << "  " << Stus[i].Total_Score << endl;
        }
        delete[]Stus;

        return 0;
   
}
2018-08-17 23:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489198-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.099369 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved