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

[复制链接]
查看11 | 回复1 | 2011-5-14 09:21:38 | 显示全部楼层 |阅读模式
问题:某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:
(1)A、B至少有一人作案;
(2)A、E、F三人中至少有两人参与作案;
(3)A、D不可能是同案犯;
(4)B、C或同时作案,或与本案无关;
(5)C、D中有且仅有一人作案;
(6)如果D没有参与作案,则E也不可能参与作案。
试编一程序,将作案人找出来。
输出格式为(以下结果不是最终答案):
A:不是罪犯
B:是罪犯
C:是罪犯
D:不是罪犯
E:不是罪犯
F:是罪犯
代码:
#includestdio.h
intmain()
{
inti,j,k;
for(i=0;i=3;i)
{for(j=i1;j=4;j)
{for(k=j1;k=5;k)
{if(((i==0)(j==1)=1)((i==0)(j==4)(k==5)=2)((i==0)(j==3||k==3)!=2)((i==1||j==1)(i==2||j==2||k==2)!=1)((i==2||j==2||k==2)(i==3||j==3|k==3)==1)!((i!=3||j!=3||k!=3)
break;}}break;}break;}
return0;
}
其中所设的i,j,k分别代表三个嫌疑犯,并且将A——F六个字母数字化。A对应0,B对应的,依次类推。
回复

使用道具 举报

千问 | 2011-5-14 09:21:38 | 显示全部楼层
//罪犯不一定只有3个人,所以你的代码框架有点问题,直接帮你大换血了。
//不太好编辑,可能看起来有点乱
#includestdio.h
intmain()
{
        intA,B,C,D,E,F;//每个罪犯只有01两种情况,1是罪犯0清白
        for(A=0;A2;A)//A
        for(B=0;B2;B)                //B
        for(C=0;C2;C)                //C
        for(D=0;D2;D)                //D
        for(E=0;E2;E)                //E
        for(F=0;F2;F)//F
        {
                if((AB0)//AB至少一人作案
                1)        //AEF至少两人作案
               
                        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
                }
        }
        return0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行