关于苹果装箱的问题

三木哥 2009-11-18 10:45:34
如果有1000个苹果,有10个箱子,现要把1000个苹果放在10个箱子里面,放完后希望不管你向我要多少个苹果,我都可以整箱整箱的给你,如果我分别为10个箱子装入苹果,数目如下:
1, 2, 4, 8, 16, 32, 64, 128, 256, 499

1, 2, 4, 8, 16, 31, 63, 125, 250, 500

我想实现输入任何一个数据,都能自动显示取出的箱子编号及其箱子里面的苹果数目, 请问用VC该如何实现呢?
谢谢!
...全文
327 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmilmf 2009-11-19
  • 打赏
  • 举报
回复
任何数的苹果都可以整箱的拿出来,这不就和人民币的分配面额(1,2,5,10...)差不多吗,呵呵...
每次取的数都是比本数小的最大的整数值就好了。剩下的数就是本数减去已取出的数就可以了.
用递归好点,不用也可以。
wocow3 2009-11-19
  • 打赏
  • 举报
回复
为什么又是这道题。。前几天发过
总数不超过2^10-1=1023,用10个箱子都有办法拿出来
想下二进制表示,很容易理解
fandh 2009-11-19
  • 打赏
  • 举报
回复
int applebox[10] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 499};
int box[10];
int count = 0;
BOOL GetBox(int number)
{
count = 0;
int sum = 0;
for (int i=0;i<10;i++)
{
sum += applebox[i];
}
if (sum<number)
{
printf("number is too big!");
return FALSE;
}
int temp = number;
for (i=9;i>-1 && temp>0;i--)
{
if (temp>=applebox[i])
{
box[count++]=applebox[i];
temp = temp-applebox[i];
//break;
}
}
printf("number is %d: ",number);
for (i=0;i<count;i++)
{
printf("%d ",box[i]);
}
}
三木哥 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fandh 的回复:]
首先这个数不能大于1000
比如,数字是x,
那么取出比X小的最大的个数的箱子(假设个数为Y),记下这个箱子;然后,x = x-y;再这样求!
[/Quote]


能不能具体写一下代码呢?刚学写C++,呵.
多谢!
jenglev 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fandh 的回复:]
首先这个数不能大于1000
比如,数字是x,
那么取出比X小的最大的个数的箱子(假设个数为Y),记下这个箱子;然后,x = x-y;再这样求!
[/Quote]
正解
fandh 2009-11-18
  • 打赏
  • 举报
回复
递归求就行了!
fandh 2009-11-18
  • 打赏
  • 举报
回复
所有记录下来的箱子,就是的!
比如721,第一个箱子是499,然后剩下是222
对于222,第一个箱子是128,然后剩下94
这样:64 16 8 4 2
fandh 2009-11-18
  • 打赏
  • 举报
回复
首先这个数不能大于1000
比如,数字是x,
那么取出比X小的最大的个数的箱子(假设个数为Y),记下这个箱子;然后,x = x-y;再这样求!

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧