1057: 【入门】允许并列的排名

该程序用于处理竞赛排名情况,当有相同分数时,选手名次并列。首先读取选手数量及成绩,然后对成绩进行排序,接着输入要查询的名次,最后输出该选手的排名位置。

时间限制: 1.000 Sec  内存限制: 16 MB
提交: 12069  解决: 6059
[命题人:][下载数据: 70]

提交状态报告

题目描述

在我们参加的各种竞赛中,允许并列的排名方式是经常遇到的。 例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为第四名。 请编写一个程序,计算一个选手在这种排名方式之下的名次(分数高的选手排前面)。

输入

第一行为一个整数 N,表示参赛的选手数,1<=N<=100; 第二行为N个整数,表示每位选手的成绩; 第三行为一个整数m,表示要查询名次的选手的成绩。

输出

只有一个整数,表示该选手的名次。

样例

输入  复制

4 50 80 50 30 50

输出  复制

2

来源/分类

2008年北京市小学生邀请赛模拟题(2)

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

int main()
{
	int n,b=0,m;
	cin>>n;
	int a[n];
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	} 
	for(int i=0;i<n-1;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			if(a[i]<a[j])
				swap(a[i],a[j]);
		}
	}cin>>m;
	for(int i=0;i<n;i++)
	{
		if(a[i]==m)
		{
			b=i+1;
			break;
		}
	}cout<<b;
	return 0;
}
### PostgreSQL 中 `RANK()` 窗口函数的使用 `RANK()` 是 PostgreSQL 中常用的窗口函数之一,用于为结果集中的每一行分配一个排名。其核心特性在于**允许并列排名,但后续排名会跳过**。 该函数的基本语法如下: ```sql RANK() OVER ( [PARTITION BY partition_expression] ORDER BY sort_expression [ASC | DESC] ) ``` - `PARTITION BY` 是可选子句,用于将数据划分为多个独立的分区,每个分区内单独计算排名。 - `ORDER BY` 用于指定排序规则,决定了排名的依据。 当多行具有相同的排序值时,`RANK()` 会为它们分配相同的排名,但后续的排名值会跳过相应的数字。例如,在销售排名中,如果两名销售员的销售额并列第一,则他们的排名都为 1,下一名的排名将为 3,而不是 2。 #### 示例 以下查询展示了如何使用 `RANK()` 函数为销售员按销售额进行排名: ```sql SELECT salesperson, total_sales, RANK() OVER (ORDER BY total_sales DESC) AS sales_rank FROM sales_data; ``` 此查询将返回每位销售员的姓名、销售额以及对应的排名。如果存在并列情况,排名会跳过后续数字[^2]。 若希望在每个公司内部独立计算排名,则可以使用 `PARTITION BY` 子句,如下所示: ```sql SELECT comp_name, salesperson, total_sales, RANK() OVER (PARTITION BY comp_name ORDER BY total_sales DESC) AS rank FROM sales_data; ``` 此查询将按公司分组,并在每个公司内部根据销售额进行排名。由于 `RANK()` 的特性,同一公司内销售额相同的销售员将获得相同的排名,后续排名将跳过相应数字[^1]。 #### 与 `DENSE_RANK()` 的区别 与 `RANK()` 不同,`DENSE_RANK()` 也允许并列排名,但**不会跳过后续排名**。这意味着在存在并列的情况下,`DENSE_RANK()` 会为并列行分配相同的排名,但下一名的排名值将紧随其后。 例如,如果两名销售并列第一,则 `RANK()` 会将下一名排为 3,而 `DENSE_RANK()` 会将其排为 2[^3]。 #### 实际应用 `RANK()` 函数常用于需要体现排名跳跃的业务场景,如竞赛排名、销售绩效评估等。尤其在需要明确区分并列排名的情况下,`RANK()` 是更合适的选择[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值