补充翻译 Markdown / Latex
查看原帖
补充翻译 Markdown / Latex
1275540
Hootime楼主2025/1/6 15:43

题目描述

KEY 公司开发出一种新的保险箱。要打开保险箱,不需要钥匙,但需要输入一个正确的、由 nn 位数字组成的密码。当正确地输入最后一位密码后,保险箱就立刻打开了。保险箱上没有“确定”键。当你输入超过 nn 位数字,则只有最后 nn 位数字有效。例如,对一种 44 位数字编码的型号,如果正确的编码为 4567,你想输入的编码为 1234567890,则保险箱的门会在你输入数字 7 后马上就打开了。

为了达到这种效果所需要设计的软件其实很简单:

  • nn 位数字编码的型号,保险箱始终处于 10(n1)10^{(n-1)} 种内部状态之一。
  • 保险箱的当前状态只需用最后输入的 n1n-1 位数字表示,其中有一种状态(例如,对前面的例子,就是 456)被记为“开锁状态”。
  • 如果保险箱处于“开锁状态”,且输入最后一位正确的数字(例如,在上面的例子中就是 7),保险箱的门就打开了;
  • 否则保险箱切换到对应的新状态。

例如,如果保险箱的当前状态为 456,接着输入 8,则保险箱的状态切换到 568

开保险箱的一个繁琐的策略是一位接一位地输入所有可能的编码。然而,在最坏情况下,这需要按键 n×10nn\times10^n 次。而选择一个好的数字序列,最多只需要按键 10n+n110^n+ n - 1 次就可以打开保险箱。你需要做的就是找到一个数字序列包含所有的 nn 位数一次且仅一次。

KEY 公司宣称,对军用型号(n=6n = 6),当今最快的计算机也需要数十亿年的时间才能找到这样的数字序列,但是很显然,他们不知道有些程序员能在几分钟就能找到这样的数字序列。

输入描述

  • 输入文件中包含多个测试数据。每个测试数据为一个整数 n(1n6)n(1\le n\le6)
  • 输入文件最后一行为0,表示输入结束。

输出描述

  • 对输入文件中的每个测试数据,输出一行包含 10n+n110^n + n - 1 位的数字序列,使得每个 nn 位数出现一次且仅一次。
2025/1/6 15:43
加载中...