谜题 11 | (1000 枚硬币和 10 个袋子)
经销商有 1000 个硬币和 10 个袋子。他必须将硬币分成十个袋子,这样他只需交出几个袋子就可以制作任意数量的硬币。怎么把他的钱分到十袋里?
解决方案:
以2的幂填充硬币的想法可以从给出每个袋子可以给或不给的问题的条件中得到,即我们不允许打开袋子并给一些硬币。因此,我们可以将每个袋子表示为取值为 0 或 1 的每个位置值。例如,如果我们必须提供 7 个硬币,那么它只不过是 0000000111 1 的最后 3 位数字表示这 3 个袋子的位置值为1,2,4 将给予 7 个硬币。请记住,每个包要么给出要么不给出,这意味着我们只有 2 个选择,这与基数 2 中的数字相似,其中每个数字只有 2 个值,1 或 0。
我们可以按照 2^n 的递增顺序将硬币填充到 10 个袋子中,其中 n 从 0 到 8 变化,用所有剩余的硬币填充最后一个袋子,如下所示:
1 = 2^0 = 1
2 = 2^1 = 2
3 = 2^2 = 4
4 = 2^3 = 8
5 = 2^4 = 16
6 = 2^5 = 32
7 = 2^6 = 64
8 = 2^7 = 128
9 = 2^8 = 256
10 = 剩余硬币 = 489
现在,经销商只需交出袋子就可以制作任意数量的硬币。
作为,
需要 0f 个硬币 = 一些袋子 1 + 一些袋子 2 + ..... + 一些袋子 n
例子:
519 个硬币 = 袋 2 + 袋 4 + 袋 8 + 袋 16 + 袋 489
2 的幂以外的因式分解算法在计算机系统上成本很高。请分享任何其他信息。任何从事密码学工作的人都可以分享更多细节。
来源:https://www.geeksforgeeks.org/forums/topic/1000-coins-and-10-bags/