实验手册实验4附加题

某刑侦大队对涉及6个嫌疑人的一桩疑案进行分析,得出初步结论:

1 A、B至少有一人作案;

2 A、E、F这3人中至少有两人参加作案;

3 A、D不可能是同案犯;

4 B、C或同时作案,或与本案无关;

5 C、D中有且仅有1人作案;

6 如果D没有参与作案,则E也不可能参与作案。
试编程,找出作案人。

 

在实验课开始前蹲在实验室做出来了,先做个存档,回去再分析。

后记:采用枚举法,S[0]~S[5]分别表示ABCDEF,1表示是嫌疑人,0表示不是嫌疑人;难点在于逻辑表达。注释如下

s[0] + s[1] >= 1    /* A、B至少有一人作案 */
s[0] + s[4] + s[5] >= 2    /* A、E、F这3人中至少有两人参加作案 */
s[0] + s[3] < 2         /*A、D不可能是同案犯 */
s[1]+s[2]==2 || s[1]+s[2]==0      /* B、C或同时作案,或与本案无关 */
s[2]+s[3] == 1        /* C、D中有且仅有1人作案 */
s[3]+s[4] == 0 || s[3] == 1  /* 如果D没有参与作案,则E也不可能参与作案,
                              * 即:要么D、E都没有参与作案,要么D参与了作案而 
                              * E可能作案也可能不作案,所以此时不写E的条件 */

 

完整代码如下

View Code
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main()
 4 {
 5     int s[6];
 6     
 7     for ( s[0] = 0; s[0] <= 1; s[0]++ )
 8     {
 9         for ( s[1] = 0; s[1] <= 1; s[1]++ )
10         {
11             for ( s[2] = 0; s[2] <= 1; s[2]++ )
12             {
13                 for ( s[3] = 0; s[3] <= 1; s[3]++ )
14                 {
15                     for ( s[4] = 0; s[4] <= 1; s[4]++ )
16                     {
17                         for ( s[5] = 0; s[5] <= 1; s[5]++ )
18                         
19                         if( s[0] + s[1] >= 1 )
20                         {
21                             if ( s[0] + s[4] + s[5] >= 2 )
22                             {
23                                  if( s[0] + s[3] < 2 )
24                                  {
25                                      if ( s[1]+s[2]==2 || s[1]+s[2]==0 )
26                                      {
27                                           if ( s[2]+s[3] == 1 )
28                                           {
29                                                if( s[3]+s[4] == 0 || s[3] == 1 )
30                                                {
31                                                    printf("A=%d\n", s[0]);
32                                                    printf("B=%d\n", s[1]);
33                                                    printf("C=%d\n", s[2]);
34                                                    printf("D=%d\n", s[3]);
35                                                    printf("E=%d\n", s[4]);
36                                                    printf("F=%d\n", s[5]);
37                                                }
38                                           }
39                                      }
40                                  }
41                             }
42                         }
43                         
44                     }
45                 }
46             }
47         }
48     }
49     system("pause");
50     return 0;
51 }

 

posted @ 2012-11-07 13:26  Joyee  阅读(385)  评论(1编辑  收藏  举报