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  
    
  • 相关阅读:
    Linux/shell: remove adjacent similar patterns
    Calculate difference between consecutive data points in a column from a file
    awk
    自定义Cordova插件(基础篇)
    npm init 命令生成package.json文件
    自定义Cordova插件详解
    Android 回退键监听
    Cordova结合Vue学习Camera
    解决悬浮的<header>、<footer>遮挡内容的处理技巧
    npm 是干什么的
  • 原文地址:https://www.cnblogs.com/chaolong/p/3183929.html
Copyright © 2011-2022 走看看