C语言 解决逻辑推理问题:我已经写出了代码,请帮我修正一下。谢谢

C语言 解决逻辑推理问题:我已经写出了代码,请帮我修正一下。谢谢,第1张

//罪犯不一定只有3个人,所以你的代码框架有点问题,直接帮你大换血了。

//不太好编辑,可能看起来有点乱

#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 ()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11923643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存