查看: 1001|回复: 28

[IQ风暴] 【原创】想象密码2

原创  已解决  简洁模式
发表于 2021-10-18 11:55:32 | 2021-10-18 14:50编辑 | 发自安卓客户端
未经作者同意,禁止转载本篇谜题
监狱里新来了两个犯人A和B,A和B平时不能碰面也不能交流,唯一可以做的就是和所有人一起每天准时去吃饭,但只能知道有没有人没去,互相无法以任何方式得到信息,更糟糕的是,如果每天一顿饭都不吃,就会被关禁闭一整天。现在B还有8天就出狱了,而A则8天后会被处死刑,他们在外面有一个保险箱,密码只有A知道,A答应过B,如果他出不去就会把密码告诉他,让B照顾好他的妻儿。但现在B只知道密码是十个数字,0至9顺序未知,并且只能输入三次,否则就永远打不开。已知A会想方设法告诉B密码,请问B有可能知道密码吗?

此回答在 2021-10-20 20:52 被选定为谜题答案

楼主| 发表于 2021-10-18 20:43:58 | 2021-10-19 10:20编辑 | 发自安卓客户端
密码有十位数,在0~9里取且不重复,应用排列组合的知识可知共有10!=3628800种可能的密码。
        由于A和B事先没有约定过解密码的方式,而且不能实现交互,所以对于B来说,只有观察A的反常活动得出密码。而A只能做一种反常活动,就是不去吃饭。一日三餐,A的选择有2^3=8种,除去一天一顿饭也不吃的情况(不仅人吃不消,还会关禁闭),每天有7种选择,所以A在这八天最多可以得到的情况有7^8=5764801种,大于3628800种,可以通过某些方式来对应3628800,或者以某种规律减少情况(只要大于3628800就可以),但这不仅增加A的计算量,而且B也不可能刚好想到,所以,一个最简单的联想就是将3628800种情况和5764801种情况分别从小到大排列,只要知道密码是3628800种情况的第几个数,就能在从小到大排列的5764801种情况找到一个数与之对应。
       以密码是4675931028为例,要想知道它是3628800个数中的第几个,就得知道小于它的数有几个。从第一位数4开始算,只要是第一位数小于4的数就一定小于它,可以取第一位数为0,1,2,3,每一个第一位数确定的数都有9!个,所以总共有9!×4个,再从第一位数为4的数里挑,看到第二位数为6,只要是第二位为0~5的数就一定小于它,所以总共有8!×6个,以此类推,小于密码的数就有9!×4+8!×6+7!×7+6!×5+5!×9+4!×3+3!×1+2!×0+1!×2=1733480个,所以4675931028就是第1733481个数。
        为了方便排列,可以以1代表去吃饭,以0代表不去吃饭(由于B不知道A的想法,有可能A以0代表去吃饭,以1代表不吃饭,这样运算会得到另一个密码,但可以输三次密码,所以两个密码都试一下就行了,也可以取任意两个不相等的数,只要能保证可以从小到大排列,运算结果是一样的),可以得到的情况有001,010,011,100,101,110,111这7种从小到大的情况,用0~6表示这7种情况,为什么不用1~7或2~8呢?因为用0~6正好可以对应七进制的所有数,第一天表示第一位数,第二天表示第二位数,以此类推,这样得到的情况就是00000000~66666666(七进制)。
将1733481变为七进制得密码是第20506611(七进制)个,在00000000~66666666(七进制)中对应的数就是20506610(七进制),这就是A八天里每天要传递给B的八个数字,即011,001,110,001,111,111,010,001。
登录帐号可查看完整回帖内容
发表于 2021-10-18 12:07:48 | 发自安卓客户端 发帖际遇
二进制可以吗,去代表1不去代表0
登录帐号可查看完整回帖内容
发表于 2021-10-18 17:02:17 | 发自安卓客户端 发帖际遇
关一天禁闭是指不能去吃饭了吗
登录帐号可查看完整回帖内容
发表于 2021-10-18 17:15:06 发帖际遇
1.请问关禁闭是指不能去吃饭吗?
2.请问是一日三餐吗?
登录帐号可查看完整回帖内容
发表于 2021-10-18 18:19:53 | 来自小霸王手机
4^8×3=196608<3628800=10!这个意思?
登录帐号可查看完整回帖内容
楼主| 发表于 2021-10-18 19:07:53 | 发自安卓客户端
答案是7^8=5764801>3628800=10!
登录帐号可查看完整回帖内容
尚未登录
您需要登录后才可以回帖 登录 | 加入学院