回 帖 发 新 帖 刷新版面

主题:一个逻辑判断的题

某地刑侦大队对涉及6个嫌疑人的案件进行分析:
(1)A,B至少有一个人作案;
(2)A,E,F至少有2人参与作案;
(3)A,D不可能是同案犯;
(4)B,C或是同案犯,或与本案无关;
(5)C,D中有且只有一人作案;
(6)如果D没有参与作案,则E也不可能参与作案。




            各位老大帮帮忙啊!!!!!
    还有啊
  一定要把这一类题型的思路教给我啊!
       我保证给你们加分,以前我是不知道可以给你们加分的!

回复列表 (共11个回复)

沙发

请把题发出来好不?

板凳


不好意思啊
    第一次发图片
  呵呵 
    不是很会

3 楼

类似的题目就是要把已知抽象成代码
一般来说,用01标志变量法,1表示真0表示假
那么,可以设立abcdef六个变量来表示六个嫌疑人的犯罪状况
最容易想到的就是穷举,然后检查是否满足条件。穷举就是嵌套循环了(怎么循环?认真理解一下上面两行说了什么)
接下来就是逻辑表达式的翻译。举例:A,B至少有一个人作案;a,b两人的状况,而且谈到至少,那么肯定是a和b的状态放在一起考虑。至少一人作案,1个人作案变量是1,那么两人至少一人作案的表达式的值就是至少为1,完整地翻译过来就是a+b>=1
按照这样的思路写出所有的逻辑表达式,最后判断如果满足所有条件,就打出当时的6个变量的取值情况

4 楼

不知道你是想迅速作出这道题的答案,还是要编码求出这个答案,如果是后者,看楼上的就可以了;我说下前者吧,迅速作出这道题的答案.用假设法,即假设某个人是凶手,将条件依次推一下,满足所有条件的,可以认为假设成立,所有的判断都为正确的,得到了答案;不满足其中任意一个条件的马上可以终止判断,断定他不是凶手,再判断下一个人.拿本题做例子.假设A为凶手,(3)条可以断定D不是凶手,进而(5)判断C是凶手,进而(6)判断E不是,(2)->F是凶手,(4)->B是凶手,6个条件都满足.可以得到此题的答案了.此判断法最优判断N次,最差判断N平方次.(N为嫌疑犯人数)

5 楼


帮忙把源代码写出来好吗?
     我对看代码有感觉些
谢了!!!

6 楼


#include <stido.h>
main()
{
      int a,b,c,d,e,f;
      for (a=0;a<=1;a++)
      for (b=0;b<=1;b++)
      for (e=0;b<=1;e++)
      for (f=0;f<=1;f++)
      {
          if(a=0) d=1;
          else d=0;
          if(d=0) e=0;
          c=b;
          if((1<=a+b)&&(2<=a+e+f))
          {
                                    if(a==1) printf("A\n");
                                    if(b==1) printf("B\n");
                                    if(c==1) printf("C\n");
                                    if(d==1) printf("D\n");
                                    if(e==1) printf("E\n");
                                    if(f==1) printf("F\n");
          }
      }
}



     小弟试着写了一下但是编译器说有错误,帮忙看下哪里错了啊!

7 楼

离散数学问题!

8 楼

完整源代码要求付费。lz你现在对我说的还是没有理解。好好在纸上列出真值表逐一分析六条条件吧

9 楼

简单说下问题:条件3:两人可以都没作案
条件5:lz没有写出条件5的判断语句
代码的问题:if里判断相等应该是==,写=的话变成赋值了

10 楼

3楼 正解
#include<iostream>
using namespace std;
int main()
{
    int a,b,c,d,e,f;
    
    for(a=0;a<=1;a++)
    {
        for(b=0;b<=1;b++)
        {
            for(c=0;c<=1;c++)
            {
                for(d=0;d<=1;d++)
                {
                    for(e=0;e<=1;e++)
                    {
                        for(f=0;f<=1;f++)
                        {
                            if(   (a||b==1) 
                                && (a&&e&&f==1)
                                &&(a&&d==0)
                                &&(b&&c==0)
                                &&(c^d==1)
                                &&(d&&e==0))
                            {
                                cout<<"a" <<a<<endl;
                                cout<<"b "<<b<<endl;
                                cout<<"c "<<b<<endl;
                                cout<<"d "<<b<<endl;
                                cout<<"e "<<b<<endl;
                                cout<<"f "<<b<<endl;
                                cout<<"------------------"<<endl;
                            }
                        }
                    }
                }
            }
        }
    }
}

我来回复

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