预测比赛名次?
五位跳水高手将参加十米高台跳水决赛,有好事者让五格据实力预测比赛结果。
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C第后,我第三;
E选手说:我第四,A第一;
决赛成绩公布以后,每位选手的预测都只说对了一半,即一对一错,请编写程序接触比赛的实际名次。
>> 本文固定链接: http://www.vcgood.com/archives/2996
预测比赛名次?
五位跳水高手将参加十米高台跳水决赛,有好事者让五格据实力预测比赛结果。
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C第后,我第三;
E选手说:我第四,A第一;
决赛成绩公布以后,每位选手的预测都只说对了一半,即一对一错,请编写程序接触比赛的实际名次。
>> 本文固定链接: http://www.vcgood.com/archives/2996
你必须先 登录才能发表评论。
#include “stdio.h”
#define A_S (b==2)^(a==3)
#define B_S (b==2)^(e==4)
#define C_S (c==1)^(d==2)
#define D_S (c==5)^(d==3)
#define E_S (e==4)^(a==1)
//A_S means A says
void main()
{
int a,b,c,d,e;
for(a=1;a<=5;a++)
for(b=1;b<=5;b++)
for(c=1;c<=5;c++)
for(d=1;d<=5;d++)
for(e=1;e<=5;e++)
if(a*b*c*d*e==120)
if(A_S && B_S && C_S && D_S && E_S)
goto loop;
loop:printf(“A ranks %d\nB ranks %d\nC ranks %d\nD ranks %d\nE ranks %d\n”,a,b,c,d,e);
}
其实我只是个菜鸟,希望大家批评指正。
我不懂,能不能带注释给我讲讲,谢谢了!。。。
看5个宏定义:
^(异或)运算符的作用是两个表达式都为0或都为1则结果为0,一个为1一个为0则为1。题目要求是只有一句是对的,也就是 表达1^表达2=1
下面就是main函数了:
5个for的嵌套相信你能理解,关键是怎么判断5个数不相等。我认为,只要这5个数的最小公倍数和他们的乘积相等,我们就可以认为:
只要他们他们的成绩等于120,也就是说它们的乘积等于5!,a到e这5个变量就分别取了1到5这5个数,没有重复,你自己感觉一下。
在5个变量取了不同的数的前提下,只要满足这5个人都说对了一半,也就行了吧。所谓都说对了一半,不就是
if(A_S==1 && B_S==1 && C_S==1 && D_S==1 && E_S==1)嘛
不也就可以缩写成
if(A_S && B_S && C_S && D_S && E_S)嘛
我说的清楚吗?