某刑侦大队对涉及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 }