16:30:06 2009-10-06 JHorn H
问题的描述:
问题: 现在有600个苹果以及10个盒子,把600个苹果放到10个盒子里。
这个时候有个人来买x苹果,x为随便说出一个数,
要求直接拿这10盒子中的几个组装,不能拆分盒子,就可以给他。请问这10个盒子应该分别装多少苹果?
用程序实现出来
程序的输出:
1. 输出1 - 10 号盘子个放几个苹果。
2. 这个
人来买x个苹果时,还要输出哪几个盘子的组合(编号 1 -- 10 )
我的思想就是将 10个装苹果的篮子看成10位的二进值数值
1111 1111 11
这十个二进制位 表示最大数值 1023
1023超出了题目的需求,那就使用前9个位
前九个位表示的最大数值是 511,而题目给出的数值为 600,
那么600 - 511 = 89; 所以用最后一个篮子放89个苹果;
其余的9位表示1 -- 511 所有数:
二进制 十进制
1 000 000 00 ----- 256
100 000 00 ------- 128;
10 000 00 ------- 64;
1 000 00 ------- 32;
100 00 ------- 16;
10 00 ------ 8;
1 00 ------ 4;
10 ------- 2;
1 ------- 1
所以 1 --- 9 个篮子按照上面的十进制放,这样的组合可以满足 1 ----- 511多所有数值,在加上第10号框子中的89 就可以表示 1 -- 600 之间的所有数值。
算法如下:
JHorn Han