排名(08nhoi)

班上刚测试了几门课,现在信息技术老师要分析一些功课之间的成绩关系,看看每个人的信息技术课排名以及他的数学排名,并按信息技术课的成绩从高分到低分排列(数据中保证任意一学科中没有两个人的这门课成绩是一样的)。老师把任务交给了信息学最好的你,请你编程完成这个任务。

输入格式

  第一行一个整数N,表示共有N个同学的成绩。

  后面有N行,每行4个整数,分别表示一个同学的:语文、数学、英语、信息技术成绩。

输出格式

共N行,每行6个数据,分别对应一个同学的:语文、数学、英语、信息技术成绩和信息技术及数学的排名。

数据范围:

    1<=N<=45;

    每个成绩C的范围为:0<=C<=120;


 

输入/输出例子1

输入:

3

90   95   89  110

95  120   78  115

96   97  103   92

输出:

95  120   78  115   1  1
90   95   89  110   2  3

96   97  103   92   3  2

我们先来了解一下结构体:

        在实际问题中,一组数据往往具有不同的数据类型。例如,人口大普查时,我们需要记录每一位公民的姓名,年龄,性别,住址,身份证号码。这些信息分别要用整型,字符型,字符串型来记录。为了解决问题,C++语言给出了另一种构造数据类型——“结构体”,它在数据存储方面相当于其他高级语言中的记录,但它有着面向对象的优势。

结构体变量的定义有两种方式:

定义结构体的同时定义结构体变量

   

struct 结构体名{//其中 struct 是关键字
    成员表   //可以有多个成员
    成员函数  //可以有多个成员函数,也可以没有
}  结构体变量表; //可以同时定义多个结构体变量

      

结构体变量名列表的各个变量用“,”隔开。

    例如:

struct DATA{
    int a[2];        //成员为一个数组
    int c;      
 }data_a,data_b;   

当然,我们也可以先定义结构体再定义结构体变量

struct 结构体名{
    成员表
    成员函数
};
结构体名  结构体变量表;//同样可以同时定义多个结构体变量

例如:

struct DATA{
    int a[2];                      
  int c;    
};
DATA data_a,data_b;//这种定义方式与上一种方式的效果是相同的

了解结构体,现在,我们先定义一个简单的结构体,这个结构体将用来记录一个学生的大致情况,所以它的成员应该有学号、姓名、性别、年龄、成绩、家庭住址等。

#include<iostream>
using namespace std;
struct student{
    int num;   //学号
    char name[21];  //姓名
    char sex;   //性别
    int age;   //年龄
    float score;   //成绩
     char address[51];  //家庭住址
}a,b;//此处不可忽略分号
int main()
{
  cin>>a.num>>a.name>>a.sex>>a.age>>a.score>>a.address;
  cin>>b.num>>b.name>>b.sex>>b.age>>b.score>>b.address;
  cout<<a.num<<' '<<a.name<<' '<<a.sex<<' '<<a.age<<' '<<a.score<<' '<<a.address<<endl;
  cout<<b.num<<' '<<b.name<<' '<<b.sex<<' '<<b.age<<' '<<b.score<<' '<<b.address<<endl;
   return 0;
}

代码:

#include<bits/stdc++.h>
using namespace std;
struct data
{
	long long yw;
	long long sx;
    long long yy;
    long long xh;
    long long xx;
};
data sorts[309];
bool px(data x,data y)
{
	return x.sx>y.sx;
}
bool ps(data x,data y)
{
	return x.xx>y.xx;
}
long long n;
int main()
{
    cin>>n;
    for(long long i=1; i<=n; i++)
    {
        scanf("%lld%lld%lld%lld",&sorts[i].yw,&sorts[i].sx,&sorts[i].yy,&sorts[i].xx);
    }
    sort(sorts+1,sorts+1+n,px);
    for(long long i=1; i<=n; i++)
    sorts[i].xh=i;
    sort(sorts+1,sorts+1+n,ps);
    for(long long i=1; i<=n; i++)
    {
         scanf("%lld%lld%lld%lld",&sorts[i].yw,&sorts[i].sx,&sorts[i].yy,&sorts[i].xx);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值