zoukankan      html  css  js  c++  java
  • 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  
    
  • 相关阅读:
    oc kvc的模式:匹配搜索模式(模式匹配)、装包解包
    编程语言的多态与动态
    swift的@objc总结
    swift函数的调用约定
    PHP实现微信退款的分析与源码实现
    【MySQL】20个经典面试题,全部答对月薪10k+
    redis面试题总结
    【Redis缓存机制】1.Redis介绍和使用场景
    php四种文件加载语句
    做网站-mysql表字段设计
  • 原文地址:https://www.cnblogs.com/chaolong/p/3183929.html
Copyright © 2011-2022 走看看