C语言:猜名次

题目:

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

            

A选手说:B第二我第三

B选手说:我第二E第四

C选手说:我第一D第二

D选手说:C最后我第三

E选手说:我第四A第一

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

                    

 =========================================================================

                       

扫描二维码关注公众号,回复: 15598219 查看本文章

思路:

总体思路:

1 表示 ,用 0 表示

因为 都说对了一半,所以有

一半 + 另一半 = 1

只有一半为 真,即 1;另一半为 假,即 0

             

(一).

创建变量 A B C D E

            

组合排列所有情况:

因为有 5个名次,所以每个人都有 5种可能

可以用 for循环 循环5次 表示 5种可能

因为一个名次只能有一个

例如:如果A是第一名,那么其它四人中就不可能有第一名,

所以5个人 5个for循环 应该是嵌套着的

                 

(二).

把符合所有人说的情况全部列出来

使用 if条件判断语句判断条件即是5人说的情况

             

满足条件后还要确定5个名次各只出现一次

A * B * C * D * E == 120

(1 * 2 * 3 * 4 * 5 == 120)

             

进行打印

                


                 

第一步:

(1).

创建变量 A B C D E

            

(2).

组合排列所有情况:

因为有 5个名次,所以每个人都有 5种可能

可以用 for循环 循环5次 表示 5种可能

因为一个名次只能有一个

例如:如果A是第一名,那么其它四人中就不可能有第一名,

所以5个人 5个for循环 应该是嵌套着的

                     

实现代码:

#include <stdio.h>
int main()
{
	//创建变量:
	int A = 0;
	int B = 0;
	int C = 0;
	int D = 0;
	int E = 0;

	//组合排列所有情况:
	for (A = 1; A <= 5; A++)
		//A的所有可能性(5个名次)
	{
		for (B = 1; B <= 5; B++)
			//B的所有可能性(5个名次)
		{
			for (C = 1; C <= 5; C++)
				//C的所有可能性(5个名次)
			{
				for (D = 1; D <= 5; D++)
					//D的所有可能性(5个名次)
				{
					for (E = 1; E <= 5; E++)
						//E的所有可能性(5个名次)
					{
						
					}
				}
			}
		}
	}

	return 0;
}

实现图片:

                 


                 

第二步:

把符合所有人说的情况全部列出来

          

(1).

使用 if条件判断语句判断条件即是5人说的情况

             

(2).

满足条件后还要确定5个名次各只出现一次

A * B * C * D * E == 120

(1 * 2 * 3 * 4 * 5 == 120)

             

(3).

进行打印

                     

实现代码:

#include <stdio.h>
int main()
{
	//创建变量:
	int A = 0;
	int B = 0;
	int C = 0;
	int D = 0;
	int E = 0;

	//组合排列所有情况:
	for (A = 1; A <= 5; A++)
		//A的所有可能性(5个名次)
	{
		for (B = 1; B <= 5; B++)
			//B的所有可能性(5个名次)
		{
			for (C = 1; C <= 5; C++)
				//C的所有可能性(5个名次)
			{
				for (D = 1; D <= 5; D++)
					//D的所有可能性(5个名次)
				{
					for (E = 1; E <= 5; E++)
						//E的所有可能性(5个名次)
					{
						//组合排列了所有情况后,把符合所有人说的情况全列出来:
						if (((B == 2) + (A == 3) == 1) &&
							((B == 2) + (E == 4) == 1) &&
							((C == 1) + (D == 2) == 1) &&
							((C == 5) + (D == 3) == 1) &&
							((E == 4) + (A == 1) == 1))
						{
							//确定5个名次各只出现一次:
							if (A * B * C * D * E == 120)
							{
								//进行打印:
								printf("A=%d B=%d C=%d D=%d E=%d\n", A, B, C, D, E);
							}
						}
					}
				}
			}
		}
	}

	return 0;
}

实现图片:

                    

最终代码和实现效果

最终代码:

#include <stdio.h>
int main()
{
	//创建变量:
	int A = 0;
	int B = 0;
	int C = 0;
	int D = 0;
	int E = 0;

	//组合排列所有情况:
	for (A = 1; A <= 5; A++)
		//A的所有可能性(5个名次)
	{
		for (B = 1; B <= 5; B++)
			//B的所有可能性(5个名次)
		{
			for (C = 1; C <= 5; C++)
				//C的所有可能性(5个名次)
			{
				for (D = 1; D <= 5; D++)
					//D的所有可能性(5个名次)
				{
					for (E = 1; E <= 5; E++)
						//E的所有可能性(5个名次)
					{
						//组合排列了所有情况后,把符合所有人说的情况全列出来:
						if (((B == 2) + (A == 3) == 1) &&
							((B == 2) + (E == 4) == 1) &&
							((C == 1) + (D == 2) == 1) &&
							((C == 5) + (D == 3) == 1) &&
							((E == 4) + (A == 1) == 1))
						{
							//确定5个名次各只出现一次:
							if (A * B * C * D * E == 120)
							{
								//进行打印:
								printf("A=%d B=%d C=%d D=%d E=%d\n", A, B, C, D, E);
							}
						}
					}
				}
			}
		}
	}

	return 0;
}

实现效果:

猜你喜欢

转载自blog.csdn.net/weixin_63176266/article/details/131495243