C语言 for 循环:解谜数学,玩转生活!-三、猜名次

题目描述:

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

解题思路:

通过对题目的阅读后,我们知道 每个人的名次可能是 1 ~ 5 的一个。
所以:
(1)首先我们可以通过 一 一 列举的办法,将每个人的 名次 列出来;
(2)然后进行判断是否满足题目说的 “每位选手都说对了一半”的条件;
(3) 最后还要加上每个人只能有一个名次,即(a * b * c * d * e) == 120
(4) 从而 得到每个人比赛最终的名次 。

代码如下(示例):

#include<stdio.h>

int main()
{
	//定义五个整型变量,用于存放 5个运动员的名次
	int a = 0;
	int b = 0;
	int c = 0;
	int d = 0;
	int e = 0;
	//把 a b c d e 五个人可能出现的每次进行 一 一列举出来
	for (int a = 1; a <= 5; a++)
	{ 
		for (int b = 1; b <= 5; b++)
		{
			for (int c = 1; c <= 5; c++)
			{
				for (int d = 1; d <= 5; d++)
				{
					for (int e = 1; e <= 5; e++)
					{
						//判断是否满足下面的判断条件
						if ( ((b == 2) + (a == 3) == 1)&&
						     ((b == 2) + (e == 4) == 1)&&
						     ((c == 1) + (d == 2) == 1)&&
						     ((c == 5) + (d == 3) == 1)&&
						     ((a == 1) + (e == 4) == 1)&&
							 ((a * b * c * d * e) == 120)
							)
						{
							//输出名次
							printf("a = %d\n", a);
							printf("b = %d\n", b);
							printf("c = %d\n", c);
							printf("d = %d\n", d);
							printf("e = %d\n", e);
						}
					}
				}
			}
		}
	}

	return 0;
}

输出结果(示例):


上一篇:C# 面向对象的接口


下一篇:C++标准模板库 -- map和set