随笔 - 18  文章 - 5  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

程序设计基础

牛们

搜索

  •  

最新评论

阅读排行榜

评论排行榜

Sort of the scores

问题描述

现有一份成绩单,成绩单的每一行包括一个同学的学号(199999999的正整数,无前导0)及语文、数学、英语、物理、化学的成绩,所有的成绩都是0100的整数。将这个成绩单按总分从大到小的顺序输出。

输入

第一行为一个正整数N(1<=N<=100),表示参加考试的人数,也就是成绩单里的人数。

接下来N行,每行6个正整数,分别为每位同学的学号和五科成绩。

输出

输出N行,按所有同学总分从大到小的顺序输出每个同学的信息,每行为6个正整数,分别为每位同学的学号和五科成绩。如果两个或多个同学的总分相同,则按他们的学号从小到大输出。

样例输入

3

200501 80 100 1 39 99

200502 70 100 99 39 11

200519 99 99 99 0 99

样例输出

200519 99 99 99 0 99

200501 80 100 1 39 99

200502 70 100 99 39 11

 

 

#include <iostream>
using namespace std;
struct person
{
    
int id;
    
int score[5];
    
int sum;
}

student[
101];
int main()
{
    
int n;
    cin
>>n;
    
int i;
    
for(i=1;i<=n;++i)
    
{
        cin
>>student[i].id;
        student[i].sum
=0;
        
for (int j=0;j<5;++j)
        
{
            cin
>>student[i].score[j];
            student[i].sum
+=student[i].score[j];
        }

    }

    
for (i=n-1;i>=1;i--)
        
for (int j=1; j<=i;++j)
            
if((student[j].sum<student[j+1].sum)
                
||
                ((student[j].sum
==student[j+1].sum)
                
&&
                (student[j].id
>student[j+1].id)))
            
{person tmp=student[j];
            student[j]
=student[j+1];
            student[j
+1]=tmp;
            }

            
for (i=1;i<=n;++i)
            
{
                cout
<<student[i].id<<' ';
                
for (int j=0; j<5;++j)
                    cout
<<student[i].score[j]<<' ';
                cout
<<endl;
            }

            
return 0;
}
posted on 2009-12-27 08:39 jyy 阅读(100) 评论(0)  编辑 收藏 引用 所属分类: OJ平台

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理