问题:
3对情侣参加婚礼,3个新。郎分别为a、b、c,三个新郎分别为 x、y、z。有人想知道究竟谁和谁结婚,于是就问新人中的三位,得到如下提示:a说 他将和X结婚;x说她的未婚夫是c;c说她将和z 结婚。这人时候知道他们都在开玩笑,说的全是假话,那么究竟谁和谁结婚呐。
解决本题的算法思想:
用a = 1 表示新郎a 和 新娘x 结婚,同理,如果新郎a 不与x 结婚则表示成 a!=1。根据题意可以得到以下表达式:
a != 1; a说她将和x结婚
c != 1; x说她的未婚夫是c
c != 3; c说他将和z结婚
题中的隐含条件,即3个新郎不能互为配偶,则有:a != b; b != c; c != a;穷举所有可能的情况,通过上述表达式进行推理。如果假设的情况使上述表达式成立,则假设的情况就是正确的结果。
源代码:
#include<stdio.h> int main() { int a, b, c; for (a = 1; a <= 3; a++) //穷举所有可能 { for (b = 1; b <= 3; b++) { for (c = 1; c <= 3; c++) { if (a != 1 && c != 1 && c != 3 && a!= b&&b != c&&c != a ) //如果表达式为真,则输出结果 { printf("%c will merryto a\n", 'x' + a - 1); printf("%c will merryto a\n", 'x' + b - 1); printf("%c will merryto a\n", 'x' + c - 1); } } } } return 0; }