高台跳水比赛结果程序预测

1。五位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

假设A的第一句话是真的,那么B是第二为真,那么B所说的E第四必为假,E所说的A第一则为真,C所说的我第一必为假,D第二为真,于初始假设矛盾,pass。

假设A的第二句话是真的,那么B第二为假,A第三为真,B所说我第二为假,E第四为真,E所说我第四为真,A第一为假,D所说C最后为真,我第三为假,C所说我第一为假,D第二为真。则排名为
A3 E4 C5 D2 B1
这是我们自己人脑推理出来的,那么如何用电脑实现呢?
首先,A B C D E五位选手都可能获得第1~5名,但是,实际结果必须要满足如上条件的约束,且名次不能重复。所以我们可以用五个for循环去模拟五个人的名次,然后用这些条件去筛出满足的答案,最后输出即可。
具体代码如下

#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
	int b = 0;
	int c = 0;
	int d = 0;
	int e = 0;
	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 (a != b && a != c && a != d && a != e &&
							b != c && b != d && b != e && c != d &&
							 c != e && d != e)
						{
							if (((b == 2 && a != 3)||(b != 2 && a == 3) == 1)
								&&((b == 2 && e != 4) || (b != 2 && e == 4) == 1)
								&&((c == 1 && d != 2) || (c != 1 && d == 2) == 1)
								&&((c == 5 && d != 3) || (c != 5 && d == 3) == 1)
								&&((e == 4 && a != 1) || (e != 4 && a == 1) == 1))
							{
								printf(" a = %d\n b = %d\n c = %d\n d = %d\n e = %d\n",
									a,b,c,d,e);
							}
					    }
					}
				}
			}
		}
	}
system("pause");
}

结果如下
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/huanglu12138/article/details/84197844
今日推荐