//不太好编辑,可能看起来有点乱
#include <stdio.h>
int main()
{
int A,B,C,D,E,F //每个罪犯只有01两种情况,1是罪犯0清白
for(A=0A<2A++)//A
for(B=0B<2B++) //B
for(C=0C<2C++) //C
for(D=0D<2D++) //D
for(E=0E<2E++) //E
for(F=0F<2F++) //F
{
if( (A +B >0 ) //AB至少一人作案
&&(A+E+F >1) //AEF至少两人作案
&&(A+D == 1) //AD不可能是同案犯
&&(B+C != 1) //BC或同案 或与本案无关
&&(C+D == 1 ) //CD只有一人作案
&&(!(!D &&E))) //如果D没有参与作案,则E也不可能参与作案
{
printf("A:%s\n", A==1?"作案":"非作案" )
printf("B:%s\n", B==1?"作案":"非作案" )
printf("C:%s\n", C==1?"作案":"非作案" )
printf("D:%s\n", D==1?"作案":"非作案" )
printf("E:%s\n", E==1?"作案":"非作案" )
printf("F:%s\n", F==1?"作案":"非作案" )
break //如果不止一个解,就不需要这个break
}
}
return 0
}
main() {short a,b,c,d,j,t
for (j = 0j <=15j++) { // 16次循环表示2的4次方
a = (j &8) >>3 // j和8按位与,然后右移三位
b = (j &4) >>2 //同上
c = (j &2) >>1//同上
d = j &1 //同上 不移位
t = (b + c + d == 1) + (!b &&c) + (a + d == 1) + (!b &&c)
//此处是四种表达式结果的和,其中 b+c+d==1 为例,即b+c+d如果等于1 那么这个表达式的值为1,否则为0,t即四个表达式的真值的和,用t的值来判断有几个是真的。
if ((t == 2) &&(a + b + c + d == 1)) {//如果其中两个条件为真,即t=2,并且abcd的和为1
printf ("%d,%d,%d,%d\n",a,b,c,d) //输出结果abcd
}
}
getch ()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)