您的位置:首页 > 其它

ZZULI-1193: 单科成绩排序(结构体专题)

2016-07-19 15:36 169 查看

1193: 单科成绩排序(结构体专题)

Time Limit: 1 Sec  Memory Limit:
128 MB
Submit: 761  Solved: 337

SubmitStatusWeb
Board

Description

有一学生成绩表,包括学号、姓名、3门课程成绩。请按要求排序输出:若输入1,则按第1门课成绩降序输出成绩表,若输入为i(1<=i<=3),则按第i门课成绩降序输出成绩表。

Input

首先输入一个整数n(1<=n<=100),表示学生人数;

然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。

最后一行输入一个整数i,表示要求按第i门课成绩降序排序输出,若该门课成绩相同,则按学号升序。

Output

输出按第i门课降序排序的结果,格式见样例。

Sample Input

3
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
1


Sample Output

541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
解题思路:
不知道这道题有没有简单的步骤。。。。构造了三个布尔函数!
AC代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
char s[15];
char n[25];
int x;
int y;
int z;
} a[110];
bool cmp1(node A,node B)
{
if(A.x !=B.x )
    return A.x >B.x ;
    else
    {
      return strcmp(A.s ,B.s)<0 ;
}
}
bool cmp2(node A,node B)
{
    if(A.y !=B.y )
    return A.y >B.y ;
    else
    {
      return strcmp(A.s ,B.s)<0 ;
}
}
bool cmp3(node A,node B)
{
    if(A.z !=B.z )
    return A.z >B.z ;
    else
    {
      return strcmp(A.s ,B.s)<0 ;
}
}
int main()
{
int n,t,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s%s%d%d%d",&a[i].s ,&a[i].n ,&a[i].x ,&a[i].y ,&a[i].z );
}
scanf("%d",&t);
if(t==1)
{
sort(a,a+n,cmp1);
for(i=0;i<n;i++)
 {
printf("%s %s %d %d %d\n",a[i].s ,a[i].n ,a[i].x ,a[i].y ,a[i].z );
 }
}
if(t==2)
{
sort(a,a+n,cmp2);
for(i=0;i<n;i++)
 {
printf("%s %s %d %d %d\n",a[i].s ,a[i].n ,a[i].x ,a[i].y ,a[i].z );
 }
}
if(t==3)
{
sort(a,a+n,cmp3);
for(i=0;i<n;i++)
 {
printf("%s %s %d %d %d\n",a[i].s ,a[i].n ,a[i].x ,a[i].y ,a[i].z );
 }
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: