能优化吗
  • 板块灌水区
  • 楼主zcx20242024
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/7/28 11:07
  • 上次更新2024/7/28 13:11:42
查看原帖
能优化吗
1377954
zcx20242024楼主2024/7/28 11:07

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

输入格式 第一行为一个整数n,表示参赛的选手数,1<=n<=1000 ,第二行为n个整数,表示每位选手的成绩。

输出格式 一行,表示每位选手的名次

#include<cstdio>
using namespace std;
int a[1005],b[1005],c[1005];
int swap(int &a,int &b)
{
	a^=b^=a^=b;
	return a,b;
}
int main()
{
	int n,u=0,o;
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]),b[i]=i;
	for(int i=1;i<n;i++)
	{
		for(int j=1;j<n;j++)
		{
			if(a[j]<a[j+1]) swap(a[j],a[j+1]),swap(b[j],b[j+1]);
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(a[i]==a[i-1]) c[i]=o,u++;
		else u++,o=u,c[i]=o;
	}
	for(int i=1;i<n;i++)
	{
		for(int j=1;j<n;j++) 
		{
			if(b[j]>b[j+1]) swap(b[j],b[j+1]),swap(c[j],c[j+1]);
		}
	}
	for(int i=1;i<=n;i++) printf("%d ",c[i]);
	return 0;
}
2024/7/28 11:07
加载中...