输入n(n<=20000)个人的成绩和学号,请将这些人按成绩从高到低进行排序(1.双关键字排序(用struct的))

1 篇文章 0 订阅
题目描述

输入n(n<=20000)个人的成绩和学号,请将这些人按成绩从高到低进行排序

输入

输入共n行,每行两个整数,分别表示成绩和学号

输出

输出共n行,每行两个数,按成绩从高到低进行输出

样例输入
5
100 5
4  8
24 90
98 2
99 3
样例输出
100 5
99 3
98 2
24 90
4 8

struct node {
	int a1,b1;
} a[1000101];

1.很明显的双关键字排序,用到了struct!

其实struct明显是两数组或多数组,但两个数组或多个数组十分麻烦。将第一个排序,再把对应的b数组用一个c数组来判断是否是之前的数字。(本博客只会怎么点,大佬勿喷)

struct是这么用的:

(int a,b 可以定更多3,4,5,6,7,8…………a数组中100500是这道题的范围)这样就相当于一个a1数组,一个b1数组,还有个好处就是a1数组排序,b1也跟着排序。(相反道理一样)

那输出咋办呢?

看见a数组了吗?

只要这样:

cout<<a[i].a1;

同样:

cin>>a[i].a1;

你又问:

排序咋办?

(sort不会不知道吧)

这样:

sort(a+1,a+1+n,cmp);

不需要加a1,b1什么的。

你又双叒叕的问:

cmp咋么编?????

那你就得根据题目中说的了。

那就看我们的题目(两处线索):

1.请将这些人按成绩从高到低进行排序

2.输出共n行,每行两个数,按成绩从高到低进行输出

那就这么编(把成绩看为a1):

bool cmp(node q,node h) {
	return q.a1>h.a1;
}

也可以:

bool cmp(node q,node h) {
	if(q.b1>h.b1)return q.b1;
    else return h.b1;
}

最后加上几句for就OK了!

cin行:

for(int i=1; i<=n; i++)cin>>a[i].a1>>a[i].b1;

然后是cout行:

for(int i=1; i<=n; i++)cout<<a[i].a1<<" "<<a[i].b1<<"\n";

代码:

#include <bits/stdc++.h>
using namespace std;
int n;
struct node {
	int a1,b1;
} a[1000101];
bool cmp(node q,node h) {
	return q.cj>h.cj;
}
main() {
	cin>>n;
	for(int i=1; i<=n; i++)cin>>a[i].a1>>a[i].b1;
	sort(a+1,a+1+n,cmp);
	for(int i=1; i<=n; i++)cout<<a[i].a1<<" "<<a[i].b1<<"\n";
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值