题目:
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; }
实现效果: