主题:考考你的智力-->>>>>>
bingjava
[专家分:0] 发布于 2006-03-29 18:49:00
[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个回复)
沙发
narsh [专家分:790] 发布于 2006-03-29 21:18:00
设置一个数组,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参与抢劫
板凳
flysun0311 [专家分:2040] 发布于 2006-03-29 22:37:00
离散数学上的题目!
呵呵!
3 楼
rickone [专家分:15390] 发布于 2006-03-30 18:18:00
1楼的程序不错!
我来回复