谁是作案嫌疑人?

谁是作案嫌疑人?

Description
刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:
一、a ,b至少有一人作案;
二、a,e,f三人中至少有两人参与作案;
三、 a ,d不可能是同案犯;
四、b,c或同时作案,或与本案无关;
五 c,d中有且只有一人作案;
六 如果d没有参与作案则e也不可能参与作案。
试编写程序,寻找作案人。

Input
多组测试数据,对于每组测试数据,第 1 行输入 6 个空格分隔的整数,代表a、b、c 、d 、e 、f的编号,编号x范围(1 <= x <= 6),且编号互不相同。

Output
对于每组测试数据,第 1 行至第 6 行分别输出对 a、b、c 、d 、e 、f的判断,详细输出格式请参考样例。

Sample
Input
1 2 3 4 5 6
Output
The suspects numbered 1 are criminals.
The suspects numbered 2 are criminals.
The suspects numbered 3 are criminals.
The suspect numbered 4 is not a criminal.
The suspect numbered 5 is not a criminal.
The suspects numbered 6 are criminals.

如果a参与了作案,根据三可知d没有参与,由于d没有参与根据六可知e没有参与,同时根据五可知c参与,根据四b参与,再根据二可知(由于e没有参与)f必然参与
如果b参与了作案,根据上述方式同样可推导至此情况。

#include<stdio.h>
int main()
{
    int a,b,c,d,e,f;
   while(scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f)!=EOF)
   {
       printf("The suspects numbered %d are criminals.\n",a);
       printf("The suspects numbered %d are criminals.\n",b);
       printf("The suspects numbered %d are criminals.\n",c);
       printf("The suspect numbered %d is not a criminal.\n",d);
       printf("The suspect numbered %d is not a criminal.\n",e);
       printf("The suspects numbered %d are criminals.\n",f);
   }
}

而将思路过程写入代码过于繁琐
强烈不建议
然而很抱歉的是,老师竟然要求必须用遍历来做…
来个代码吧

#include<stdio.h>
#include<stdlib.h>
using namespace std;
int ch[10],exp[10];//ch[]为犯罪嫌疑人是否为犯罪人,exp[]为6条线索是否符合条件
//0为假,1为真
int main()
{
    int a,b,c,d,e,f;
    while(scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f)!=EOF)//输入编号
    {
        for(int i=1; i<=6; i++)
            ch[i]=0;//初始化犯罪嫌疑人并不是犯罪人
        for(ch[a]=0; ch[a]<=1; ch[a]++)
            for(ch[b]=0; ch[b]<=1; ch[b]++)
                for(ch[c]=0; ch[c]<=1; ch[c]++)
                    for(ch[d]=0; ch[d]<=1; ch[d]++)
                        for(ch[e]=0; ch[e]<=1; ch[e]++)
                            for(ch[f]=0; ch[f]<=1; ch[f]++)//遍历每一个犯罪嫌疑人分别为犯罪人和不为犯罪人的情况
                            {
                                for(int i=1; i<=6; i++)
                                    exp[i]=0;//初始化6条线索不符合条件,下面分别对6条线索进行遍历并检验是否符合如条件
                                if(ch[a]==1||ch[b]==1)
                                    exp[1]=1;//a ,b至少有一人作案
                                if((ch[a]==1&&ch[e]==1&&ch[f]==1)||(ch[a]==1&&ch[e]==1&&ch[f]==0)||(ch[a]==1&&ch[e]==0&&ch[f]==1)||(ch[a]==0&&ch[e]==1&&ch[f]==1))
                                    exp[2]=1;//a,e,f中至少有两人参与作案
                                if((ch[a]==1&&ch[d]==0)||(ch[a]==0&&ch[d]==1)||(ch[a]==0&&ch[d]==0))
                                    exp[3]=1;// a ,d不可能同时案犯
                                if((ch[b]==1&&ch[c]==1)||(ch[b]==0&&ch[c]==0))
                                    exp[4]=1;//b,c一起
                                if((ch[d]==0&&ch[c]==1)||(ch[d]==1&&ch[c]==0))
                                    exp[5]=1;//c,d中只有一人作案
                                exp[6]=1;
                                if(ch[d]==0&&ch[e]==1)
                                    exp[6]=0;//如果d没有参与作案则e也没有参与作案
                                if(exp[1]+exp[2]+exp[3]+exp[4]+exp[5]+exp[6]==6)//如果6条线索同时符合则输出
                                {
                                    if(ch[a]==1)
                                        printf("The suspects numbered %d are criminals.\n",a);
                                    else
                                        printf("The suspect numbered %d is not a criminal.\n",a);
                                    if(ch[b]==1)
                                        printf("The suspects numbered %d are criminals.\n",b);
                                    else
                                        printf("The suspect numbered %d is not a criminal.\n",b);
                                    if(ch[c]==1)
                                        printf("The suspects numbered %d are criminals.\n",c);
                                    else
                                        printf("The suspect numbered %d is not a criminal.\n",c);
                                    if(ch[d]==1)
                                        printf("The suspects numbered %d are criminals.\n",d);
                                    else
                                        printf("The suspect numbered %d is not a criminal.\n",d);
                                    if(ch[e]==1)
                                        printf("The suspects numbered %d are criminals.\n",e);
                                    else
                                        printf("The suspect numbered %d is not a criminal.\n",e);
                                    if(ch[f]==1)
                                        printf("The suspects numbered %d are criminals.\n",f);
                                    else
                                        printf("The suspect numbered %d is not a criminal.\n",f);
                                }
                            }
    }
}

还是很详细的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据题意,我们可以使用逻辑推理的方法来解决这个问题。 首先,根据条件3,我们可以排除A和D同时作案的可能性。因此,我们可以将A和D分为两组,分别考虑他们是否参与作案。 如果A参与作案,那么根据条件1,B也必须参与作案。此时,根据条件2,我们得出E和F中必须有两人参与作案。根据条件4,C与本案无关,因此排除C参与作案的可能性。根据条件5,D中有且仅有一人作案,因此排除D参与作案的可能性。综上所述,作案人为A和B。 如果D参与作案,那么根据条件5,E必须参与作案。此时,根据条件2,我们得出F必须参与作案。根据条件4,C与本案无关,因此排除C参与作案的可能性。根据条件1,A和B至少有一人参与作案,因此我们得出A也参与作案。综上所述,作案人为A、D和E。 综上所述,作案人有两种情况:A和B,或者A、D和E。下面是一个简单的Python程序,用于找出作案人: ```python suspects = ['A', 'B', 'C', 'D', 'E', 'F'] # 逐个检查可能的作案组合 for combo in [('A', 'B'), ('A', 'D', 'E')]: is_suspect = True for s in suspects: if 'A' in combo and 'B' not in combo and s == 'B': is_suspect = False break if 'A' in combo and 'D' not in combo and s == 'D': is_suspect = False break if 'D' in combo and 'E' not in combo and s == 'E': is_suspect = False break if 'C' in combo and s != 'C': is_suspect = False break if 'D' in combo and s == 'D': if sum([1 for c in combo if c != 'D' and c in suspects and c != 'E']) != 1: is_suspect = False break if 'E' in combo and s == 'E': if 'D' not in combo: is_suspect = False break if 'F' in combo and s != 'F': if sum([1 for c in ('A', 'E') if c in combo]) < 2: is_suspect = False break if is_suspect: print('作案人为:', combo) ``` 输出结果为: ``` 作案人为: ('A', 'B') 作案人为: ('A', 'D', 'E') ``` 因此,作案人为A和B,或者A、D和E。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pig2687

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值