精华内容
下载资源
问答
  • (更新后的解法)允许并列排名
    2021-11-18 20:36:12
    #include "stdio.h"
    void main()
    {
    	int N,m,i,x,d=0,j,temp;
    	int a[100];
    	scanf("%d",&N);
    	for(i=0;i<N;i++)
    	    scanf("%d",&a[i]);
    	scanf("%d",&m);
    		for(i=0;i<N-1;i++)
    		{
    			for(j=0;j<N-1-i;j++)
    			{
    				if(a[j]<a[j+1])
    				{
    					temp=a[j];
    					a[j]=a[j+1];
    					a[j+1]=temp;
    					
    				}
    			}
    		}
         for(i=0;i<N;i++)
    	 {
    		 if(a[i]==m)
    		 {
    			 x=i;
    			 break;
    		 }
    		 if(a[i]==a[i+1])
    		   d++;   
    	}
    	printf("%d\n",x+1-d);
    	 
    }
    
    

    更多相关内容
  • 假设有n个人进行排名,允许并列排名,名次并列人的不同顺序算一种,总共有多少种排名? 例:n=2,输出3,有:a>b,a<b,a=b。 解题思路 这里用到的是动态规划的方法,当然也可以用递归,但是递归计算复杂度高,...

    疯狂游戏笔试一道有趣的编程题:排名问题

    题目描述

    假设有n个人进行排名,允许并列排名,名次并列人的不同顺序算一种,总共有多少种排名?
    例:n=2,输出3,有:a>b,a<b,a=b。
    

    解题思路

    这里用到的是动态规划的方法,当然也可以用递归,但是递归计算复杂度高,所以还是用动态规划吧。不了解递归和动态规划区别的自行百度。

    首先假设有j个人,名次的个数为i(1 <= i <= j),当i = 1时,j个人排名一样,当i = j时,j个人没有重复的名次,定义f(i,j)为j个人i个名次的排名个数。我们从简单开始想,首先1个人的时候,只有1种排名方式,即f(1,1) = 1; 两个人的时候相当于在1个人的基础上又加了一个人,而新加入的这个人的名次可能和第一个人的名次相同,也可能不同,即f(1,2) = 1,f(2,2) = 2,因为不同的时候有两种情况,同样3个人的时候是在两个人的基础上新加入一个人,以此类推。。。
    总结来说,第一种情况,1 < i < j。j个人有i个名次可以看作是j-1个人新加入1个人,j-1个人的名次有两种情况:(1)i个排名,则新加入的人只能是i个名次中的一个,有i种可能;(2)i-1个名次,则新加入的人只能是新的名次,其可以插入在i-1个名次的任意位置,有i种可能;所以可以得到f(i,j) = i×f(i-1,j-1) + i×f(i,j-1)。
    第二种情况,i = 1,所有人名次一样,f(1, j) = 1。
    第三种情况,i = j,此时进行全排列即可,f(i, i) = i !。

    代码

    需要注意的是,程序里的下标是从0开始,所以dp[i][j]实际上是j+1个人有i+1个名次的排名个数。

    // 以下只为函数体部分,语言为Java
    public int numSort(int n) {
    	if(n <= 0)
    		return 0;
    	if(n == 1)
    		return 1;
    	int result = 0;
    	int[][] dp = new int[n][n];   // dp[i][j]表示j+1个人有i+1种排名的个数
    	// 行大于列的地方不考虑
    	// 初始化第一行,第二种情况
    	for(int i = 0; i < n; i++) {
    		dp[0][i] = 1;
    	}
    	// 初始化对角线,全排列,第三种情况
    	for(int i = 1; i < n; i++) {
    		dp[i][i] = nFac(i+1);
    	}
    	// 第一种情况
    	for(int i = 1; i < n; i++) {
    		for(int j = i+1; j < n; j++) {
    			dp[i][j] = (i+1)*dp[i][j-1] + (i+1)*dp[i-1][j-1];
    		}
    	}
    	for(int i = 0; i < n; i ++) {
    		result += dp[i][n-1];
    	}
    	return result;
    }
    // 求n的阶乘
    public int nFac(int n) {
    	if(n == 0)
    		return 1;
    	int result = 1;
    	while(n > 0) {
    		result *= n;
    		n -- ;
    	}
    	return result;
    }
    

    就到这里啦。
    2019年7月20日,本人的第一篇博客。

    展开全文
  • 允许并列排名

    2020-12-20 11:10:34
    在我们参加的各种竞赛中,允许并列排名方式是经常遇到的。 例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为第四名。 请你编写一个程序,计算一个选手...

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

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

    输出
    文件中只有一个整数,表示该选手的名次。
    样例输入 Copy
    4
    50 80 50 30
    50
    样例输出 Copy
    2

    #include<bits/stdc++.h>
    using namespace std;
    int a,b[1000],c;
    int main()
    {
    	cin>>a;
    	for(int i=1;i<=a;i++)
    		cin>>b[i];
    	cin>>c;
    	for(int i=1;i<=a;i++)
    		for(int j=i;j<=a;j++)
    			if(b[i]<b[j])
    				swap(b[i],b[j]);
    	for(int i=1;i<=a;i++)
    	{
    		if(b[i]==c)
    		{
    			cout<<i;
    			return 0;
    		}
    	}
    	exit;
    }
    
    展开全文
  • 题目描述 在我们参加的各种竞赛中,允许并列排名方式是经常遇到的。 例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为第四名。 请编写一个程序,计算...
  • } 这里再看一题:Problem: 并列排名 Description 快码佳编四兄弟姐妹来到了大唐,大唐好多英雄好汉,每年他们都会搞一个武艺比赛。主持人介绍说, 在我们参加的各种竞赛中,允许并列的排名方式是经常遇到的。 例如有...

    冒泡排序原理就是:如果有n个数,相邻的两个数进行比较,就是1号和2号,2号和3号…n-1号和n号比较,每次比较确定一个数的位置。也就是第一个轮回比较n-1次,第二个就比较n-2次,直到只需要比较两个数为止。
    核心部分就是双重嵌套循环,但是从这可以看出它的时间复杂度是O(n^2),复杂度很高。
    下面举一个例子,顺带解决输出数的拥有者的问题;
    Output
    分数相同的,先输入的先输出
    Sample Input
    5
    菜鸟1号 90
    菜鸟2号 80
    菜鸟3号 60
    菜鸟4号 90
    菜鸟5号 70
    Sample output
    菜鸟1号
    菜鸟4号
    菜鸟2号
    菜鸟5号
    菜鸟3号

    (这里就不用调用strcpy函数来实现了)直接放代码:

    #include<stdio.h>
    #include<string.h>
    struct  stu
    {
    	char  name[20];
    	int   num;
    };
    
    int main()
    {
    	int n,i,j;
    	scanf("%d",&n);
    	struct stu f[n],t;
    	for(int i=0;i<n;i++)	scanf("%s%d",f[i].name,&f[i].num);
    	for( i=0;i<n-1;i++)
    	{
    		for( j=0;j<n-i-1;j++)
    		{
    			if(f[j].num<f[j+1].num)
    			{
    				t=f[j];
    				f[j]=f[j+1];
    				f[j+1]=t;				
    			} 
    		}
    	} 
    	for( i=0;i<n;i++)	printf("%s\n",f[i].name);
    	return 0;
     } 
    

    这里再看一题:Problem: 并列排名
    Description
    快码佳编四兄弟姐妹来到了大唐,大唐好多英雄好汉,每年他们都会搞一个武艺比赛。主持人介绍说, 在我们参加的各种竞赛中,允许并列的排名方式是经常遇到的。 例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为第四名。 请编写一个程序,计算一个选手在这种排名方式之下的名次(分数高的选手排前面)。
    Input
    第一行为一个整数N(1<=N<=100),表示参赛的选手数,第二行为N个整数,表示每位选手的成绩,第三行为一个整数m,表示要查询名次的选手的成绩。
    Output
    输出一个整数,表示该选手的名次。
    Sample Input
    4
    50 80 50 30
    50
    Sample Output
    2
    这题注意要进行多组测试,代码如下:

    #include<stdio.h>
    int main()
    {
    	int n,m;
    	while(scanf("%d",&n)!=EOF)
    	{
    		int a[n+1],t;
    		for(int i=1;i<=n;i++)	scanf("%d",&a[i]);
    		for(int i=1;i<=n-1;i++)
    		{
    			for(int j=1;j<=n-i;j++)
    			{
    				if(a[j]<a[j+1])
    				{
    					t=a[j];
    					a[j]=a[j+1];
    					a[j+1]=t;
    				}
    			}
    		 }
    		 scanf("%d",&m); 
    		 for(int i=1;i<=n;i++)
    		 {
    		 	if(m==a[i])
    		 	{
    		 		printf("%d\n",i);
    		 		break;
    			 }
    		}
    	  } 
    	return 0;
    }
    
    展开全文
  • 在我们参加的各种竞赛中,允许并列排名方式是经常遇到的。 例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为第四名。 请编写一个程序,计算每个选手在...
  • 并列排名

    千次阅读 2019-12-01 11:52:04
    并列排名 零基础之题,so easy 题目描述 在我们参加的各种竞赛中,允许并列的排名方式是经常遇到的。 例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为...
  • 输出数组中数字排名(不允许并列排名)         算法一(有缺陷的算法):将当前元素大于数组中元素的个数作为其排名。   /** * 算法一 * 思路:将每个数组中元素与整个数组中的所有元素(包括自身)比较, ...
  • #include<bits/stdc++.h> using namespace std; int a,b[1000],c; int main() { cin>>a; for(int i=1;i<=a;i++) cin>>b[i]; cin>>c; for(int i=1;i<... for(.
  • 查询到的数据如下如所示: ...需求:按照fs排名,可并列 dense_rank dense_rank() over (order by fs desc) ranks 补充: rank() 一般用不到,太特殊,两个并列第三名后面是第五名 而不是 第四名
  • 在我们参加的各种竞赛中,允许并列排名方式是经常遇到的。 例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为第四名。 请编写一个程序,计算每个选手在...
  • 并列排序问题

    2020-05-27 00:52:29
    1. 对所有员工的当前(to_date=‘9999-01-01’)薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列 MySQL实现方法:相当于Oracle中的dense_rank() over() 方式一: SET @rank=0; SET @salary=-1...
  • 题目描述 在我们参加的各种竞赛中,允许并列排名方式是经常遇到的。 例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为第四名。 请编写一个程序,计算...
  • Problem : 并列排名

    2019-12-30 08:09:02
    Problem : 并列排名 Time Limit: 1 SecMemory Limit: 128 MB Submit: 3697Solved: 490 Description 快码佳编四兄弟姐妹来到了大唐,大唐好多英雄好汉,每年他们都会搞一个武艺比赛。主持人介绍说, 在我们参加的...
  • 并列排名问题(疯狂游戏笔试编程题)

    千次阅读 多人点赞 2019-07-21 09:46:30
    题目描述: n个人排名允许并列名次,共有多少种排名结果?(1 ) 示例: n = 1时,结果为1,只有一种排名结果。 n = 2时,结果为3,即 a = b, a > b, b > a 三种情况。 n = 3时,结果为13,下面列举: a = b = c a...
  • 排名也有多种排名方式,如直接排名、分组排名排名有间隔或排名无间隔等等,这篇文章将总结几种MySQL中常见的排名问题。创建测试表create table scores_tb (id int auto_increment primary key,xuehao int not null...
  • score排名前3的记录 方法1. select * from scores order by score desc limit 3 方法2. select * from scores where score&amp;amp;amp;amp;gt;= (select max(score) from scores where score &amp;amp;...
  • codeup22594 允许并列排名

    千次阅读 2018-02-25 15:47:56
    codeup22594 允许并列排名 时空限制 1000ms/128MB 题目描述 在我们参加的各种竞赛中,允许并列排名方式是经常遇到的。 例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均...
  • 目录 表结构 题目一:获取每个科目下前五成绩排名允许并列) 分析: 题目二:获取每个科目下最后两名学生的成绩平均值 分析: 题目三:获取每个科目下前五成绩排名(不允许并列) 分析: ROW_NUMBER()函数版 参考...
  • 将score按ID分组排名:row_number() over(partition by id order by score desc) 将score不分组排名:row_number() over(order by score desc) select id,area,score, row_number() over(partition by id order ...
  • 将score按ID分组排名:dense_rank() over(partition by id order by score desc) 将score不分组排名:dense_rank() over(order by score desc) select id,area,score, dense_rank() over(partition by id order ...
  • 实际要求 查询学生 英语成绩前五名 并列的要指出 表的情况 学生表: 成绩表 实现SQL : with ranks as( select score, '第'+ cast( row_number() over( order by score desc ) as nvarchar) ++ '名' as...
  • SQL并列排序问题

    千次阅读 2020-08-01 16:25:37
    有这么一道面试题,说有学生表(student),其中字段包括id(主键)、name(姓名)、score(分数),按照成绩进行排名,其中成绩一样的,名次要并列。 首先说一下,排序有两种,一种是最直白的理解排序,另一种常常...
  • n个人排名允许并列名次,共有多少种排名结果? 经典问题了,可以考虑递推: 假设n个人,排出了m个名次,有f(n,m)种结果(1 当m=1 f(n,m)=1 当n f(n,m)=0 当1 假设n-1个人,排出了m个名次;新来1人,与前面某名次...
  • C++ 排名

    2022-03-26 21:10:15
    (相同分数算并列排名,比如总共 4 个人 7,6,6,5,那么他们的排名分别就是 1,2,2,4) 【输入格式】 第一行包括三个整数N,A,S,分别表示班里同学的人数,小明的分数,以及班里同学的总分。 【输出格式】 包括...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,950
精华内容 780
关键字:

允许并列的排名

友情链接: ADS12LINKERGUIDE.rar