五人预测比赛结果均答对一半,求比赛名次

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果

A选手说:B第一,我第三。

B选手说:我第二,E第四。

C选手说:我第一,D第二。

D选手说:C最后,我第三。

E选手说:我第四,A第一。

比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

此题没说没有并列情况,所以我们要考虑到并列第几的情况,也要考虑到跨名次情况(即没有1就有2、3、4、5等)。首先假设D选手说的“C最后”认为为C是第五,然后对于存在并列第几情况的问题,引进二进制。通过将1(0001)移位,再与0(0000)进行或运算,最后判断最终得到的二进制数中有没有0,存在0,则说明有跨名次的情况;不存在0,则得到满足题意正确的比赛名次。

代码如下:

#include<stdio.h>
int main()
{
	int a,b,c,d,e,val,flag;
	for(a=1;a<6;a++)
	{for(b=1;b<6;b++)
		{for(c=1;c<6;c++)
			{for(d=1;d<6;d++)
				{for(e=1;e<6;e++)
					{if((1==(b==1)+(a==3))&&(1==(b==2)+(e==4))&&
					    (1==(c==1)+(d==2))&&(1==(c==5)+(d==3))&&
					    (1==(e==4)+(a==1)))
	/*当a=3;将1(0001)左移2位变为0100(有第三),a再和0000进行或运算(|)就得到0100*/
						{
							val=0;
						    flag=1;
						    val|=(1<<(a-1));
						    val|=(1<<(b-1));
						    val|=(1<<(c-1));
						    val|=(1<<(d-1));
						    val|=(1<<(e-1));
						    while(val)
						    {
						    	if(val%2==0)
							    {
							    	flag=0;
							    }
							    val/=2;
						    }
						    if(flag==1)
						    {
					   printf("a=%d b=%d c=%d d=%d e=%d\n",a,b,c,d,e);
						    }
						}   
					}
				}
			}
		}
	}
	system("pause");
	return 0;
}
时间: 2024-08-06 10:46:37

五人预测比赛结果均答对一半,求比赛名次的相关文章

他答对一半(打一字)asp.net开源简答题项目

先出个字谜: 他答对一半(打一字) 你猜出来了没? 可以到这个网址答题:http://hovertree.com/shortanswer/bjae/f53e663164227906.htm 看你的答案是否正确. 这是ASP.NET开源CMS项目HoverTree的一个功能:简答题,目前正在测试中,如果你希望这部分的源代码公布的话,请推荐一下本文,给我开发整理代码的动力,谢谢. HoverTree使用的语言是C#,数据库为Sql Server,基于.NET 4.0,使用三层结构,如果你有兴趣的话,

软件工程之“五人黑”团队开发章程

“五人黑”小组团队开发章程 一.团队目标 1)在规定时间内完成项目(团委微信平台)的开发和测试工作,且完成时间尽量早. 2)保证完成的项目是高质量的,即:软件拥有较好的易操作性.用户友好性:代码具有较好的健壮性.可维护性. 3) 每位小组成员都能在项目开发中学习到实用的开发技术,并能对软件工程有所体会. 二.团队守则 1)每位团队成员应积极主动完成好自己的任务,不拖延项目的进度.如实在因任务过于繁忙需要调整进度,可与团队进行协商. 2)每位团队成员在开发过程中都应严格遵守团队协商制定的代码规范,

2014多校第五场1001 || HDU 4911 Inversion (归并求逆序数)

题目链接 题意 : 给你一个数列,可以随意交换两相邻元素,交换次数不超过k次,让你找出i < j 且ai > aj的(i,j)的对数最小是多少对. 思路 : 一开始想的很多,各种都想了,后来终于想出来这根本就是求逆序数嘛,可以用归并排序,也可以用树状数组,不过我们用树状数组做错了,也不知道为什么.求出逆序数来再减掉k次,就可以求出最终结果来了.求逆序数链接1,链接2 1 #include <stdio.h> 2 3 int left[250003], right[250003];

用蒙特卡罗方法计算五人传球问题

蒙特卡罗方法百度解释http://baike.baidu.com/link?url=XwVnK6P_gip61_P9RzC9u6T4KQP5hmoZIvx57XBM66hPBONRRl3-yAwldGr3orFe 问题描述: 有A B C D E 五个人,围成一圈,开始球在A的手上,然后由A向与自己相邻的两边的某一人传球,然后要求计算球被传十次,最后又回到A手中的概率. 如上图所示,A只能把球传给B或者E,其几率是相同的. 对每个人来说把球传给左边或者右边的人的几率都是相同的,且为1/2: 这样

五人分鱼

/* 5.A/B/C/D/E 5个人在某天夜里合伙去捕鱼,到凌晨时都疲惫不堪,于是各自找地方睡觉,第二天,A第一个醒来,他将鱼分成5份,把多余的一条鱼扔掉,拿走自己的一份.B第二个醒来,也将鱼分成5份,把多余的一条鱼扔掉,拿走自己的一份.C/D/E依次醒来,按同样的方法拿鱼.问他们合伙至少捕了多少条鱼? 假设 fun(1) fun(2) = ((fun(1) - 1) / 5) * 4 // 隐含 (fun(1) - 1) % 5 == 0 fun(3) = ((fun(2) - 1) / 5)

韩信点兵 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a&lt;3,b&lt;5,c&lt;7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。

#include <stdio.h>int main() { int n,a,b,c,i=1,j; scanf("%d %d %d",&a,&b,&c); for(n=10;n<101;n++) { if((n%3==a)&&(n%5==b)&&(n%7==c)) { printf("%d",n); break; } } if(n==101) printf("No answer&qu

练习二十二:python兵乓求比赛顺序练习,关于连个兵乓球队进行比赛

已知有两支兵乓球队进行比赛,每队各出3人: 甲队有a,b,c三人,乙队有x,y,z三人,已抽签决定比赛名单 问题:有人向队员打听比赛名单.a说他不和X比,c说他不和x,z比,程序找出比赛对手 方法一: 1 list1 = ['a','b','c'] 2 list2 = [0,0,0] 3 for i in list1: 4 if i == "c": 5 list2[list1.index(i)] = 'y' 6 elif i == "a": 7 list2[list

OCAC暑期比赛第一场 D题 足球比赛中的危险状态 题解

足球比赛中的危险状态原题链接:http://codeforces.com/problemset/problem/96/A[题目描述]灵灵非常喜欢足球.有一天,灵灵正在看一场足球比赛,在看比赛的同时灵灵在纸上写下了每一位运动员当前的位置.为了简化所有运动员的位置的描述,灵灵将其简化成了仅由字符 "0" 和 "1" 描述的一个字符串.每一个 "0" 表示主队的一个运动员,每一个 "1" 表示客队的一个运动员.如果当前的位置中存在连

(hdu step 6.3.2)Girls and Boys(比赛离开后几个人求不匹配,与邻接矩阵)

称号: Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 189 Accepted Submission(s): 127   Problem Description the second year of the university somebody started a study on the romanti