Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1276436
  • 博文数量: 213
  • 博客积分: 7590
  • 博客等级: 少将
  • 技术积分: 2185
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-31 17:31
个人简介

热爱开源,热爱linux

文章分类

全部博文(213)

文章存档

2018年(4)

2017年(1)

2015年(1)

2014年(5)

2013年(2)

2012年(2)

2011年(21)

2010年(82)

2009年(72)

2008年(23)

分类: LINUX

2010-06-08 08:58:32


今天看《高质量C++/C程序设计指南》时,发现一道上次参加笔试没能作出来的逻辑推理题,写出来,好好理解其中的逻辑推导过程,代码如下:

 /**************************************************************************
  2 * 有A,B,C,D,E五个人参与了抢劫案,有以下条件,请找出真正的罪犯
  3 * 1.如果A参与了犯罪,则B一定也参与了 A->B
  4 * 2.B和C只有一个人参与了犯罪 (B^!C)V(!B^C)
  5 * 3.C和D要么都参加,要么都没参加 (C^D)V(!C^!D)
  6 * 4.D和E至少有一个人参加犯罪 (D^E)V(!D^E)V(D^!E)
  7 * 5.如果E作案,那么A和D一定参与作案 E->(A^D)
  8 * 用1表示作案,0表示没作案,则程序如下:
  9 **************************************************************************/

 10
 11 #include <stdio.h>
 12 int main(void)
 13 {
 14 int A,B,C,D,E;
 15 int count = 0;
 16 for (A = 0;A < 2;A ++) {
 17   for (B = 0;B < 2;B ++) {
 18    for (C = 0;C < 2;C ++) {
 19     for (D = 0;D < 2;D ++) {
 20      for (E = 0;E < 2;E ++) {
 21          count = 0;//counter clear

 22          count += (A == 0||( (A==1)&& (B==1)));
 23          count += ( (B+C) == 1);
 24          count += (C == D);
 25          count += ((D+E) >= 1);
 26          count += ( E == 0||((E == 1)&&(A==1)&&(B == 1)));
 27          if (count ==5) {
 28              goto finish;
 29          }
     30 }
 31    }
 32   }
 33  }
 34 }
 35 finish:
 36 printf("Suspect A is %s.\n",(A==1)?"a criminal":"not a criminal");
 37 printf("Suspect B is %s.\n",(B==1)?"a criminal":"not a criminal");
 38 printf("Suspect C is %s.\n",(C==1)?"a criminal":"not a criminal");
 39 printf("Suspect D is %s.\n",(D==1)?"a criminal":"not a criminal");
 40 printf("Suspect E is %s.\n",(E==1)?"a criminal":"not a criminal");
 41
 42 return 0;
 43 }


阅读(1482) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~