回 帖 发 新 帖 刷新版面

主题:考考你的智力-->>>>>>


[b]怎样用C语言实现如下编程:[/b]


协助破案。假设已经查清,有A、B、C、D、E五个嫌疑人可能参与制造了一起抢劫银行案,但是不知道其中哪几个是真正的案犯。不过,有确凿证据表明:
1.如果A参与了作案,则B一定也会参与;
2.B和C两个人中只有一人参与了作案;
3.C和D要么都参与了作案,要么都没有参与;
4.D和E两个人中至少有一个人参与作案;
5.如果E作案,则A和D一定参与作案。[em13][em13]

回复列表 (共3个回复)

沙发

设置一个数组,murderer[5],分别代表ABCDE
murder[i]=0:i嫌疑人不参与抢劫
murder[i]=1:i嫌疑人参与抢劫
则可把murderer[5]看作一个5位的2进制数,取值范围为00000-〉11111,(0->31)
用for(i=0;i<32;i++)循环就可以把所有的情况都考虑在内
#include<iostream.h>
int main()
{
    int murderer[5]={-1,0,0,0,0};
    for(int i=0;i<32;i++)
    {
        murderer[0]+=1;
        for(int k=0;k<5;k++)
            if(murderer[k]==2){
                murderer[k]=0;
                murderer[k+1]+=1;
            }
        if(murderer[0]&&!murderer[1])continue;
        if(murderer[1]&&murderer[2]||!murderer[1]&&!murderer[2])continue;
        if(murderer[2]&&!murderer[3]||!murderer[2]&&murderer[3])continue;
        if(!murderer[3]&&!murderer[4])continue;
        if(murderer[4]&&(!murderer[0]||!murderer[3]))continue;    
        cout<<"murderer:"<<endl;
        for(int j=0;j<5;j++)
            if(murderer[j])cout<<j<<endl;
    }//for
    return 0;
}
答案是CD参与抢劫
        

板凳

离散数学上的题目!
呵呵!

3 楼

1楼的程序不错!

我来回复

您尚未登录,请登录后再回复。点此登录或注册