数学吧 关注:918,567贴子:8,850,275
  • 4回复贴,共1

朋友想了一个题

只看楼主收藏回复

更偏向于编算法的
n位数密码输入
最后输入的单个数字会把密码进一位,最高位数字被顶掉
怎么最快找到密码
例:
比如说密码是123456,六位数
我输入123455,显示123455
输入1234556,显示234556
输入12345561,显示345561
这样的


IP属地:广东来自Android客户端1楼2023-05-08 12:47回复
    谁想的谁解


    IP属地:浙江来自iPhone客户端3楼2023-05-08 15:38
    回复
      2025-08-15 09:01:07
      广告
      不感兴趣
      开通SVIP免广告
      楼主对问题的描述还不是太清楚,看看我理解的对不对:
      有一个6位数密码,每一位均从1~6这六种数字之一选择
      有一个密码输入装置,它只能容纳6个数字的输入。当你输入6个数字的时候,会对目前位于输入框内的6个数字检测它是不是密码,如果和密码吻合,密码就破解成功了
      但是仅输入6个数字就猜对的概率太低了,这个密码输入装置还有一个特点,就是在输入6个数字后继续输入,新输入的1个数字会接在上一次输入的数字之后,并把最早输入的那个数字“挤出去”,也就是楼主在1楼介绍的规则,此时装置会再次检测当前的6个数字是否和密码吻合。也就是说,当输入6个数字之后,每再次输入1个数字,装置都会检查1次当前的数字是否和密码吻合
      因此可以构造一个长度是5+x的输入序列,让装置检查x次,只要这x次中有一次和密码吻合,我们就破解了这个密码
      比如说12345561这个输入序列,会依次检测123455, 234556和345561这三个是否和密码吻合
      现在的问题是,如何设计输入序列,使得无论密码是什么,能够保证一定能猜出密码的同时,让x最小
      为了将问题形式化,定义x=B(k,n),这里k是每位密码可能选择的数字种类,n是密码的位数。对于这个问题,x=B(6,6)
      举个容易理解的例子,对于B(2,2),也即密码共两位,每位密码从两种数字中选(比如说0和1),则最优的序列(之一)是00110,根据装置的特点,会依次检测00,01,11,10,它遍历了密码的所有情况,所以一定能猜出任意一种密码,同时它一定是最短的,因为每种情况恰好遍历一次,再短的话就无法保证猜出任意密码了
      这个问题的解法和“德布鲁因序列”有关,楼主感兴趣的话可以搜索这个关键词


      IP属地:山东4楼2023-05-08 16:17
      收起回复