[已解决问题] 一個同事給我一個面試題,不知道程序怎么實現?
提问时间: 2008-06-30 22:32
悬赏分:10 浏览:336 次
1、现有1000个苹果,10个盒子,问各个盒子内应该分别放入多少个苹果,才能使得用户要买任意11000之间的一个苹果数,都可以给他(卖的时候是整个盒子卖,不能拆盒子的包装)。
提问者:landylee - 初学一级

问题补充:要求用程序實現?

最佳答案
static void Main(string[] args) { int[] appleNumOfBox = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; for (int boxNum = 0; boxNum < 10; boxNum++) { for (int applesToBuy = 1; applesToBuy < 1001; applesToBuy++) { if (!SumCanGet(appleNumOfBox, applesToBuy)) { appleNumOfBox[boxNum] = applesToBuy; break; } } } for (int i = 0; i < 10; i++) { Console.WriteLine(appleNumOfBox[i].ToString()+"\t"); } Console.ReadLine(); } /// <summary> /// 前面的加起来小于要买数量就返回false /// </summary> private static bool SumCanGet(int[] appleNumOfBox, int applesToBuy) { int sum = 0; for (int i = 0; i < 10; i++) { sum += appleNumOfBox[i]; } if (sum < applesToBuy) return false; else return true; } 这个题目很特殊,介于数列{2^(n-1)}前n项的和正好是2^n-1,小于第n+1项,而且可以证明数列{2^(n-1)}之和可以得到1~2^n-1之间的任何数,故有上解 运行结果1, 2, 4, 8, 16...,256,512
2008/7/1 0:22:41 回答者:MiniThi@k


提问者对于答案的评价:謝謝!
其它回答(4)
不用写程序,直接口算就出来了. 分别放1, 2, 4, 8, 16...,256个(共放了256*2-1=511个,占了9个箱子).最后剩下489个的随便放到最后一个箱子里. 比如,要3个的话: 3=2+1 5=4+1 7=4+2+1 ... 111=64+47=64+32+15=64+32+8+7=64+32+8+4+2+1 ...
2个月前   回答者:deerchao - 大侠五级
数学类问题,先找到数学原理,运用其中的数学原理知识在改为设计程序算法问题,最后是运用某种编程语言实现这个程序算法,这是解这种问题的一个考虑步骤!
2个月前   回答者:刚刚 - 老鸟四级
10进制转化为二进制的问题,10个盒子表示10个位权,按deerchao的说法就可以实现了
2个月前   回答者:风海迷沙 - 小虾三级
兔子数列问题吧
2个月前   回答者:BirdsHover - 菜鸟二级
评论
   您需要登录以后才能回答!
 

我要提问

我的问题


快到期问题

> 问题排行榜

相关链接