今天笔试有这么个题题目:有600个苹果,要求分装在10个盒子中。对于顾客要求的任意苹果数都可以通过此10个盒子进行组合得到。
当时不明白,回来后就在网上查了查有好多朋友给出了解决的代码,但是说明原理个人没看太懂,后来自己想了想,用自己的思维今天给朋友们说下,
首先,任何一个数都可以转化为一个二进制数,比如3 二进制位11, 所以是个箱子就可以看成是一个10位的二进制数,这样他可以表示的数就是1023
而二进制中的1都是2 的倍数。例如11,第一个1是2的一次,第二个1是2的零次。所以我们可以定义一个长度为10的数组来存放2的倍数。然后我们将顾客要求的任意数转化为二进制数,这个二进制数就可以用数组中2的倍数来表示了。
在举个例子:3 二进制11 数组存放了a[0]=1,a[1]=2 a[3]=2的三次方 a[4]=2的四次方。。。 而11是2的一次方+2的零次方。 所以就可以选数组中的a[0]和a[1]组成。
就是这样子。具体代码可以参考这位朋友的http://blog.youkuaiyun.com/xiaoya629/article/details/5502719