题目:
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
=========================================================================
思路:
总体思路:
用 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; }
实现效果: