C++题目:新的篮球队(题集)

文章提供了四道与篮球运动员身高排序相关的编程题目,要求根据不同的条件对运动员的身高进行排序或定位。第一题是找出最高五个人的身高;第二题是在已知身高乱序情况下,找到前五高的人;第三题同样是找到前五高,但考虑了身高可能的并列情况;第四题涉及在已有身高有序队列中插入新成员并保持顺序。每题都给出了输入输出示例和数据范围,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 新的篮球队1

题目描述

很多人希望加入中国篮球队,每个人都有一个身高hhh(单位:纳米)。

教练打算让所有人中身高最高的5个人首发出场,请列出这5个人的身高。

输入格式

第一行,一个整数nnn,表示应招的队员人数。

之后nnn行,每行一个整数hhh,分别为每个球员的身高,保证所有队员的身高互不相同。

输出格式

输出为555行,分别为身高第1,2,3,4,51,2,3,4,51,2,3,4,5高的人的身高。

样例 #1

样例输入 #1

7
1500000000
1600000000
1700000000
1800000000
1900000000
2000000000
2100000000

样例输出 #1

2100000000
2000000000
1900000000
1800000000
1700000000

样例 #2

样例输入 #2

10
1623741820
2147483640
1728490184
1204748364
1833238548
1518993456
1937986912
1414245092
2042735276
1309496728

样例输出 #2

2147483640
2042735276
1937986912
1833238548
1728490184

提示

5≤n≤7,500,0005 \le n \le 7,500,0005n7,500,000;

1100000000≤h≤21474836471100000000 \le h \le 21474836471100000000h2147483647;

答案

#include<bits/stdc++.h>
using namespace std;

int n, a[7500005]; 
int main()
{
	ios::sync_with_stdio(0);
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int i = 1; i <= 5; i++) {
		for (int j = i + 1; j <= n; j++) {
			if (a[j] > a[i])
				swap(a[j], a[i]);
		} 
	}
	for (int i = 1; i <= 5; i++)
		cout << a[i] << endl; 
    return 0;
}

2. 新的篮球队2

题目描述

很多人希望加入中国篮球队,每个人都有一个身高hhh(单位:纳米)。初始时,nnn个人按身高从高到低的顺序排好队了,但因为一些骚动,他们在队伍中的位置发生了变化。

不过好在变化的并不多,每个人现在的位置跟当初相差不超过555(例如,原先队伍中排在第100100100的人,现在一定在第95∼10595\sim 10595105范围内)

教练打算让所有人中身高分别为从高到低第a,b,c,d,ea,b,c,d,ea,b,c,d,e名的队员出场,请列出这555个人的身高。

输入格式

第一行,一个整数nnn,表示球员人数;

之后nnn行,每行一个整数hhh,为现在从前到后每个球员的身高;

之后555行,分别为555个整数a,b,c,d,ea,b,c,d,ea,b,c,d,e,保证555个数各不相同,且在1∼n1\sim n1n的范围内。

输出格式

输出为nnn行,每行一个整数,为当初(从高到低排好序的),从前到后每个球员的身高。

样例 #1

样例输入 #1

10
1937986919
1833238555
1728490191
1623741827
2042735283
1204748371
1100000007
1518993463
1414245099
1309496735
3
5
1
7
8

样例输出 #1

1833238555
1623741827
2042735283
1414245099
1309496735

提示

5≤n≤75000005 \le n \le 75000005n7500000;

1100000000≤h≤21474836471100000000 \le h \le 21474836471100000000h2147483647;

1≤a,b,c,d,e≤n1 \le a,b,c,d,e \le n1a,b,c,d,en

答案

#include<bits/stdc++.h>
using namespace std;

int n, a[7500005]; 
int main()
{
	ios::sync_with_stdio(0);
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	
	for (int i = 1; i <= n; i++) { 
		for (int j = i; j > 1 && a[j] > a[j - 1]; j--) {
			swap(a[j], a[j - 1]);
		} 
	}
	int pos;
	for (int i = 1; i <= 5; i++) {
		cin >> pos;
		cout << a[pos] << endl; 
	}
		
    return 0;
}

3. 新的篮球队3

题目描述

很多人希望加入中国篮球队,每个人都有一个身高hhh(单位:微米),这次只精确到微米是因为教练懒得量那么准了。

教练打算让所有人中身高分别为从高到低第a,b,c,d,ea,b,c,d,ea,b,c,d,e名的队员出场,不计并列(例如333个人并列第555名,我们就认为他们分列5,6,75,6,75,6,7名)。请列出这5个人的身高。

输入格式

第1行,1个整数nnn,表示应招的队员人数。

之后nnn行,每行111个整数hhh,为每个球员的身高,这次不保证所有球员的身高互不相同。

之后555行,分别为555个整数a,b,c,d,ea,b,c,d,ea,b,c,d,e,保证555个数各不相同,且在111~nnn的范围内。

输出格式

输出为5行,分别为身高从高到低的第a,b,c,d,ea,b,c,d,ea,b,c,d,e名的身高。

样例 #1

样例输入 #1

10
1116807
1575249
1750073
2043658
1208930
1311272
1127544
1950878
1877923
1337709
1
6
3
8
4

样例输出 #1

2043658
1337709
1877923
1208930
1750073

提示

【样例1解释】

所有球员按身高排序后为:

第1:2043658
第2:1950878
第3:1877923
第4:1750073
第5:1575249
第6:1337709
第7:1311272
第8:1208930
第9:1127544
第10:1116807

容易发现第1,6,3,8,41,6,3,8,41,6,3,8,4高的球员身高分别是:

2043658
1337709
1877923
1208930
1750073

【数据规模】

5≤n≤7,500,0005 \le n \le 7,500,0005n7,500,000;

1100000≤h≤21000001100000 \le h \le 21000001100000h2100000;

1≤a,b,c,d,e≤n1 \le a,b,c,d,e \le n1a,b,c,d,en

答案

#include<bits/stdc++.h>
using namespace std;

int n,a[7500001],b[2100001],t;

int main(){
    ios::sync_with_stdio(0);
    cin >> n;
    for(int i=1;i<=n;i++){
    	cin >> a[i];
    	b[a[i]]++;
	}
	int cur=1;
	for(int i=2100001;i>=1;i--){
	    for(int j=1;j<=b[i];j++){
	        a[cur++] = i;
	    }
	}
	for(int i=1;i<=5;i++){
		cin >> t;
		cout << a[t] << endl;
	}
    return 0;
}

4. 新的篮球队4

题目背景

中国的篮球队表现不佳,教练打算从全国广招人才,重新组建篮球队。但他的水平有限,不太搞得清楚谁篮球打的好,所以只好选身高最高的。

来自某小学的555位校队队员看了国家队之前的比赛,觉得自己也有实力试一试。

题目描述

很多人希望加入中国篮球队,每个人都有一个身高hhh(单位:纳米)。初始时,已经有nnn个人按身高从高到低的顺序排好队了,但有5名同学来晚了,请按他们每个人的身高给他们安排合适的位置,使得他们进入队伍后,队伍仍是从高到低排列的。

请确定这5个人在队列中的位置(从前到后的第几个)并输出。

输入格式

第一行,一个整数nnn,表示已经排好队的球员人数。

之后nnn行,每行一个整数,为已经排好队的每个球员的身高。

之后555行,每行一个整数,分别为五名迟到同学的身高。

保证所有人的身高互不相同。

输出格式

输出为555行,分别为555位同学的位置(从前到后的第几个)。

555个数从小到大排列。

样例 #1

样例输入 #1

7
2100000000
2000000000
1900000000
1800000000
1700000000
1600000000
1500000000
1550000000
1650000000
1750000000
1850000000
1950000000

样例输出 #1

3
5
7
9
11

样例 #2

样例输入 #2

10
2042735283
1937986919
1833238555
1728490191
1623741827
1518993463
1414245099
1309496735
1204748371
1100000007
1100016807
1382475249
1722650072
2084943658
1244108929

样例输出 #2

1
6
10
12
14

提示

【样例1解释】

原有的777个人已经按身高排好了序,新来的555名同学加入后,所有121212个人的身高排序为:

2100000000
2000000000
1950000000
1900000000
1850000000
1800000000
1750000000
1700000000
1650000000
1600000000
1550000000
1500000000

容易看出新来的同学分列第3,5,7,9,113,5,7,9,113,5,7,9,11名。

【数据规模】

5≤n≤7,500,0005 \le n \le 7,500,0005n7,500,000;

1100000000≤h≤21474836471100000000 \le h \le 21474836471100000000h2147483647;

答案

#include<bits/stdc++.h>
using namespace std;

int n, a[7500005]; 
int main()
{
	ios::sync_with_stdio(0);
	cin >> n;
	for (int i = 1; i <= n + 5; i++)
		cin >> a[i];
	for (int i = n + 1; i <= n + 5; i++) 
		for (int j = i + 1; j <= n + 5; j++)
			if (a[j] > a[i])
				swap(a[j], a[i]);

	int ans[10];
	for (int i = n + 1; i <= n + 5; i++) { 
		for (int j = i; j >= 1; j--) {
			if (j != 1 && a[j] > a[j - 1])
				swap(a[j], a[j - 1]);
			else {
				ans[i - n] = j; 
				break;
			} 
		} 
	}
	for (int i = 1; i <= 5; i++) {
		cout << ans[i] << endl; 
	}
		
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值