今天筆試有這麼個題題目:有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.csdn.net/xiaoya629/article/details/5502719