1000个鸡蛋放到10个箱子里 无论要多少个总能不打开箱子拿出来应该怎样去分据说有13种答案求解啊?

想想一条长度为10的二进制串能表示多少个不同的数吧……
■网友
本题要求为“不可以打开箱子”即只能以整箱为单位做加法。本回答是基于二进制的,二进制的每一位对应一个箱子。选二进制是因为在只能做加法的情况下,二进制编码是一种最有效率的方案。题中一共有10个箱子,理论上可以为1023个鸡蛋编码(1-1023),但是只要求编码到1000,于是就有了多解的可能。选的策略是这样的:先是按照1.2.4.8.16.32.64.128.256.489的顺序排好1.前九位加到一起是511,可以表示1-511的任意数2.加上最后一个数489,这个数组便可以表示1-1000的任意数试想如果最后一个数是512,那么表示范围变成1-1023但是如果把64改成65,那么这个数组无法表示64;如果改成63,则无法表示 127.可以看出,修改数列中最后面的数(第n位数)会修改数列可以表示的范围,而不会出现1-1000个鸡蛋放到10个箱子里 无论要多少个总能不打开箱子拿出来应该怎样去分据说有13种答案求解啊?
之间的数无法表示的状况。整个算法就是不停地重复这种“修改最后一位”的操作先试着把第十位加一,变成490,为了保持和不变,还要有一位数减一,减哪一位?蒙一下,第九位减一,变成255(第九位相对于前面八位相当于最后一位)。 没问题吗?验算一下,第1-8位数表示1-255,加上第9位255后可以表示1-510,再加上第10位可以表示1-1000没问题。(可以试试最后两位是257,,488的状况,这样会无法表示256)继续第十位做加法,第九位做减法,直到前九位的和是500,第十位是500,至此得到12个有效解不能再继续了,再继续又会出现无法表示的问题(1000个鸡蛋放到10个箱子里 无论要多少个总能不打开箱子拿出来应该怎样去分据说有13种答案求解啊?
=499.501:500无法表示)现在的数列是这样1.2.4.8.16.32.64.128.245.500看前九位:是不是和当初十位的状况一样?1.2.4.8.16.32.64.128都是1000个鸡蛋放到10个箱子里 无论要多少个总能不打开箱子拿出来应该怎样去分据说有13种答案求解啊?
,是“满”的,只有最后一位数245"不满"所以可以针对这九位进行相同的操作同理可以对前八位,前七位进行相同的操作直到数列变成这样1.2.4.8.16.31.63.125.250.500整个过程画成图大概是这样1000个鸡蛋放到10个箱子里 无论要多少个总能不打开箱子拿出来应该怎样去分据说有13种答案求解啊?

大概如此,没有代码将就着看吧,解肯定不止13个。
■网友
这种题有一个通用解,原理就是基于二进制。有知友已经答过了,我就补充一下具体操作。按照如下规则分组:1、2、4、8……256,即每一箱子内装的数量都是2的整次幂。如果最后一个箱子是512,那么总数1023超出了1000,此时剩多少装多少,即最后一个箱子为489。要从进制的原理说起。所谓十进制,当我们打出12345这一串数的时候,其实代表的是:1000个鸡蛋放到10个箱子里 无论要多少个总能不打开箱子拿出来应该怎样去分据说有13种答案求解啊?
同样,二进制下,我们说11010的时候,其实是:1000个鸡蛋放到10个箱子里 无论要多少个总能不打开箱子拿出来应该怎样去分据说有13种答案求解啊?
好了,以上是基础知识。让我们从最简单的情况开始,假设我们拥有一组完美的“基数”,十个箱子里分别装有1、2……512个鸡蛋。那么当我们要取任意一个数量的鸡蛋,比如说42,我们把它转化为二进制,是101010。从低位数起,第二、四、六位上的数字是1,则对应地取第二、四、六个箱子,共有 【1000个鸡蛋放到10个箱子里 无论要多少个总能不打开箱子拿出来应该怎样去分据说有13种答案求解啊?】 1000个鸡蛋放到10个箱子里 无论要多少个总能不打开箱子拿出来应该怎样去分据说有13种答案求解啊?


推荐阅读