永发信息网

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

答案:2  悬赏:0  手机版
解决时间 2021-03-28 20:00
  • 提问者网友:刺鸟
  • 2021-03-28 12:48
C语言 解决逻辑推理问题:我已经写出了代码,请帮我修正一下。谢谢
最佳答案
  • 五星知识达人网友:三千妖杀
  • 2021-03-28 14:06
//罪犯不一定只有3个人,所以你的代码框架有点问题,直接帮你大换血了。
//不太好编辑,可能看起来有点乱
#include
int main()
{
int A,B,C,D,E,F; //每个罪犯只有01两种情况,1是罪犯0清白
for(A=0;A<2;A++) //A
for(B=0;B<2;B++) //B
for(C=0;C<2;C++) //C
for(D=0;D<2;D++) //D
for(E=0;E<2;E++) //E
for(F=0;F<2;F++) //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;
}
全部回答
  • 1楼网友:独行浪子会拥风
  • 2021-03-28 15:44
这样要是题目变了,人数变了,哪不得重新写代码,看了都头晕
用集合运算算法可以适应大多数情况
可以看出 6种运算规则,先假设一个嫌疑人集合,开始为空
( 1) A 、 B 至少有一人作案; ------- 集合中加入A,B
(2)A 、 E 、 F 三人中至少有两人参与作案; -------并入A,E,F形成 C2/3 结果集N
(3)A 、 D 不可能是同案犯; -------从以上结果集中排 A/D 形成最多2*N结果集
(4)B 、 C 或同时作案,或与本案无关; ------- 排除非 BUC 结果集
(5) C 、 D 中有且仅有一人作案; ------- 排除 CUD 结果集
(6)如果 D 没有参与作案,则 E 也不可能参与作案。 -------- 排除 非D UE 结果集
输入分6次,分别输入6个规则对应的ABCDEFGHIJKLMO....就行了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯