离散 A和B谁是作案者

谁是作案者 问题:

(1)营业员 A 或 B 偷了手表;

(2)若A作案,则作案不在营业时间;

(3)若B 的证据正确,则货柜末上锁;

(4)若B 的证据不正确,则作案在营业时间;

(5)货柜上了锁。

编写程序得出谁是作案者

分析:

①由第5个条件可确定,货柜上了锁,那么我们这里假设 d 代表货柜是否上了锁

        即可得 d = 1

②由第1个条件确定作案者范围,要么是 A,要么是 B

        即 A = 1 时,B = 0;

             A = 0 时,B = 1;

③按照我们人脑的逻辑就是,由于确定货柜上了锁(第5个条件),所以由第3个条件反推 B 的证据不正确( B 是作案者 );于是由第4个条件,作案不在营业时间;于是由第2个条件反证 A 不是作案者(验证了推理的正确性)

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main ( )
{
    int A, B;   // A,B 两个人

    int c, d = 1, e;   // c 代表作案是否在营业时间,d 代表货柜是否上锁,e 代表 B 的证据是否正确
    for ( c = 0; c <= 1; ++ c )
    {
        if ( c )    // 作案不在营业时间 
        {
            A = 1;  // A 作案
        }
        else        // 作案在营业时间
        {
            A = 0;  // A 不作案
            e = 0;  // B 的证据不正确
        }

        if ( d )    // 货柜上了锁
        {
            e = 0;
        }
        else        // 货柜没上锁
        {
            e = 1;
        }

        if ( e )    // B 的证据正确
        {
            B = 0;  // B 不是作案者
        }
        else        // B 的证据不正确
        {
            B = 1;  // B 不是作案者
        }

        if ( A && !B )
        {
            puts ( "A 是作案者!" );
        }
        
        if ( B && !A )
        {
            puts ( "B 是作案者!" );
        }

    }

    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值