100c之52:黑与白

Table of Contents

问题

黑与白:有A,B,C,D,E五个人每人额头上都贴着一张纸牌:要么为黑色,要么为白色。

  • 每个人都能看到别人的颜色但是看不到自己的颜色。五人相互观察后
  • A说:我看到三人为白,一人为黑。
  • B说:我看到四人全黑。
  • C说:我看到三人为黑,一人为白。
  • D说:我看到四人全白。
  • E说:我不发表任何意见。现在已知:贴黑牌的说的都是谎话,白牌的人说的是实话。
  • 请问他们各自都是什么颜色的牌。

分析

每个人头上的牌有两种颜色,而且这两种颜色跟该人是否说谎是一一对应的。所以用穷据的方法就可以找出每个人头上牌的颜色。

程序

 1:  /**
 2:   * @file   052c.c
 3:   * @author Chaolong Zhang <emacsun@163.com>
 4:   * @date   Thu Jul 11 14:16:49 2013
 5:   * 
 6:   * @brief  黑与白:有A,B,C,D,E五个人每人额头上都贴着一张纸牌:要么为黑色,要么为白色。
 7:   *         每个人都能看到别人的颜色但是看不到自己的颜色。五人相互观察后
 8:   *         A说:我看到三人为白,一人为黑。
 9:   *         B说:我看到四人全黑。
10:   *         C说:我看到三人为黑,一人为白。         
11:   *         D说:我看到四人全白。
12:   *         E说:我不发表任何意见。现在已知:贴黑牌的说的都是谎话,白牌的人说的是实话。
13:   *         请问他们各自都是什么颜色的牌。
14:   */
15:  
16:  #include <stdio.h>
17:  
18:  #define N 2
19:  int main(int argc, char *argv[])
20:  {
21:      int a,b,c,d,e;
22:  
23:      for (a=0; a < N; ++a){
24:          for (b=0; b < N; ++b){
25:              for (c=0; c < N; ++c){
26:                  for (d=0; d < N; ++d){
27:                      for (e=0; e < N; ++e){
28:                          if ( ( ( !a && ( b+c+d+e==1 ) ) || ( a&& ( b+c+d+e !=1 ) ) ) &&
29:                               ( ( !b && ( a+c+d+e==4 ) ) || ( b&& ( a+c+d+e !=4 ) ) ) &&
30:                               ( ( !c && ( a+b+d+e==3 ) ) || ( c&& ( a+b+d+e !=3 ) ) ) &&
31:                               ( ( !d && ( a+b+c+e==0 ) ) || ( d&& ( a+b+c+e !=0 ) ) )){
32:                              printf ("A is wearing %s
", a?"black":"white");
33:                              printf ("B is wearing %s
", b?"black":"white");
34:                              printf ("C is wearing %s
", c?"black":"white");
35:                              printf ("D is wearing %s
", d?"black":"white");
36:                              printf ("E is wearing %s
", e?"black":"white");
37:                          }
38:                      }
39:                  }
40:              }
41:          }
42:      }
43:      return 0;
44:  }

结果

A is wearing black
B is wearing black
C is wearing white
D is wearing black
E is wearing white  
原文地址:https://www.cnblogs.com/chaolong/p/3183929.html