首页 > 其他 > 详细

游戏-谁是小偷

时间:2019-05-30 19:59:12      阅读:145      评论:0      收藏:0      [点我收藏+]

警察抓了 A、B、C、D 四名罪犯,其中一名是小偷,审讯的时候:

A说:“我不是小偷。” x !=0
B说:“C 是小偷。” x = 2
C说:“小偷肯定是 D。” x = 3
D说:“C 是在冤枉人。” x != 3
现在已经知道四个人中三个人说的是真话,一个人说了假话,请判断一下到底谁是小偷?

对这个问题分析,首先对 A、B、C、D 四个人分别用 0~3 四个数字进行编号,接着将四个人的描述结果用数字量化,如果描述是真,则结果是 1,如果是假,则结果是 0。我们假设小偷的编号是 x,对于四个人的描述,数字化的结果是:

dis_a = (x ~= 0) and 1 or 0;
dis_b = (x == 2) and 1 or 0;
dis_c = (x == 3) and 1 or 0;
dis_d = 1 - dis_c

依次假设 x 是 A、B、C、D(0~3 的编号数值),对每次假设对应的 dis_a、dis_b、dis_c 和 dis_d 的值求和,若结果是 3,则表示假设是对的,x 对应的值就是小偷的编号。如此将自然语言的信息数字化后,算法就可以非常简单地实现了:

function who_is_thief()
    for x = 0, 3 do
        local dis_a = (x ~= 0) and 1 or 0;
        local dis_b = (x == 2) and 1 or 0;
        local dis_c = (x == 3) and 1 or 0;
        local dis_d = 1 - dis_c
        if ((dis_a + dis_b + dis_c + dis_d) == 3) then
            print("==========thief is ", x)
        end
    end
end

 

游戏-谁是小偷

原文:https://www.cnblogs.com/orxx/p/10951191.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!