KM 最近学习了一个新的魔术,表演过程如下:
首先准备一些卡牌,每张卡牌上面都写着若干数字,然后让观众心中想一个 1 到 K 的数字(K 的大小取决于卡牌数量)。接着让观众说出这些卡牌中哪些卡牌包含他想的数字,最终就能判断出观众心中想的是什么数字。
魔术的原理非常简单,这其实是“进制”在生活中的一种应用。这里每一张卡牌都对应一个二进制位,下面我们给出一个示例:
为了方便解释,我们假设只有三张卡牌,那么我们就能用这三张卡牌表示三个二进制位,这三张卡牌的内容分别为(卡牌下方的 `0b***` 用于标识卡牌对应的二进制位,实际制作时只有上面的数字):
可以发现,第一张卡牌上是所有二进制最低为 `1` 的数字,第二张是二进制第二位为 `1` 的数字,第三张卡牌上是所有二进制第三位为 `1` 的数字。观众选择了第 `i` 张卡牌时说明二进制第 `i` 位为 `1`,没有选择则表示为 `0`,这样,我们就能根据观众的选择计算出他心中所想的数字。
-
假设用户选择了第 1 张卡牌,结果就是 `0b001 = 0b001`,也就是 1
-
假设用户选择了第 2、3 张卡牌,结果就是 `0b010 + 0b100 = 0b110`,也就是 6
-
假设用户选择了第 1、2、3 张卡牌,结果就是 `0b001 + 0b010 + 0b100 = 0b111`,也就是 7
以此类推,我们就能推得任意数量卡牌上的内容。
现在 KM 想要自己制作一些卡牌用于表演魔术,希望你能够替他解决一些问题。给出 KM 想要的卡牌数量,请算出每张卡牌上的最大值。