PTA——7-5 我们爱运动 (15分)

这篇博客介绍了如何解决一个编程问题,即在处理50米短跑比赛成绩时,如何在存在并列名次的情况下确定每个选手的准确排名。作者提供了一个C++代码实现,该代码首先读取比赛人数、小明和小红的编号以及所有选手的成绩,然后通过排序和比较来确定小明和小红的名次。关键在于处理成绩相同时的排名逻辑,确保名次的正确性。
摘要由CSDN通过智能技术生成

PTA——7-5 我们爱运动 (15分)

链接:https://pintia.cn/problem-sets/1330440096972591104/problems/1330440124365590532

小明与小红非常喜欢运动,有一次小明与小红去参加校50米短跑的比赛,一共有n(2<=n<=30000)名同学比赛选手,小明是a号选手(1<=a<=n),小红是b号选手(1<=b<=n),由于他们跑的太专注了,最后冲线的时候不知道自己是第几名,只知道每个人最后的成绩,聪明的你可不可以帮帮他们?

输入格式:

第一行 n ,a,b,代表参赛人数n,小明号数a与小红号数b;

第二行 n 个数,x1,x2,…,xn对应着各位选手的成绩。

输出格式:

输出小明与小红的名次,用1个空格分开。

输入样例1:

10 1 10
1 4 5 6 1 2 3 7 8 9

输出样例1:

1 10

输入样例2:

4 1 3
1 2 3.0 2

输出样例2:

1 4

思路:唯一的坑点就是有“并列”的情况,像排名之类的题一定要注意并列的情况。

正确代码:

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node{
	int id;
	double p;
};
bool cmp(node a,node b){
	if(a.p!=b.p){
		return a.p<b.p;
	}
	return a.id<b.id;
	
}
int main(){
	int n,a,b;
	while(scanf("%d %d %d",&n,&a,&b)!=EOF){
		node s[n+5];
		for(int i=1;i<=n;i++){
			double k;
			scanf("%f",&k);
			s[i].p=k;
			s[i].id=i;
		}
		sort(s+1,s+n+1,cmp);
		int k1=1,k2=1;
		int m=1;
		for(int i=1;i<=n;i++){
			if(i){
				if(s[i].p!=s[i-1].p){//坑点:有并列的情况
					m=i;
				}
			}
			if(s[i].id==a){
				k1=m;
			}
			else if(s[i].id==b){
				k2=m;
				
			}
		}
		printf("%d %d\n",k1,k2);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值