java算法買蘋果

今天筆試有這麼個題題目:有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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章