黑马程序员技术交流社区

标题: 面包与盘子问题(补充) [打印本页]

作者: 胡建伟    时间: 2014-3-10 23:17
标题: 面包与盘子问题(补充)
本帖最后由 胡建伟 于 2014-3-11 12:34 编辑

      有若干个面包和盘子,假如有10个面包,一个盘子只能装2个,则需要5个盘子才能装下,
如果面包为11个时候,则需要6个盘子。
      请不用判断语句,if或while情况下,如何用java程序实现面包需要多少个盘子?
      昨天没对题意说清楚,是在面包数m和每个盘子装几个n,两者都不确定情况下,如何编程实现盘子数0?
     (提示:m%n=0时,盘子数o=m/n;m%n=!0时,盘子数o=m/n+1,但是要求不用判断,这就很矛盾了,该怎么办呢)


作者: chen_x    时间: 2014-3-10 23:39
这样行不行:
public class Test {

        public static void main(String[] args) {
                count(43);
        }
        public static void count(int breadNum){
                int pan=(breadNum+1)/2;
                System.out.println(breadNum+"个面包需要"+pan+"个盘子");
        }
运行结果为:43个面包需要22个盘子
只是在面包数上加1再除以2,刚好可以避开条件判断。
}
作者: chen_x    时间: 2014-3-10 23:44
上面格式有点问题,这样:
public class Test {

        public static void main(String[] args) {
                count(43);
                count(42);
        }
        public static void count(int breadNum){
                int pan=(breadNum+1)/2;
                System.out.println(breadNum+"个面包需要"+pan+"个盘子");
        }
}
运行结果为:43个面包需要22个盘子
                  42个面包需要21个盘子
在面包数上加1再除以2,运算结果刚好可以避开条件判断。

作者: 胡建伟    时间: 2014-3-11 11:46
zengming13 发表于 2014-3-11 08:44
另一种方式也许更容易想到:
盘子数=面包数/2 + 面包数%2

呵呵,这个答案确实不错
作者: 胡建伟    时间: 2014-3-11 12:08
zengming13 发表于 2014-3-11 08:44
另一种方式也许更容易想到:
盘子数=面包数/2 + 面包数%2

盘子数=面包数/2 + 面包数%2 这个不满足所有情况啊!
比如10个面包,每个盘子放4个面包,需要3个盘子就ok,可按上面公式计算:10/4+10%4=4
作者: 胡建伟    时间: 2014-3-11 12:28
chen_x 发表于 2014-3-10 23:44
上面格式有点问题,这样:
public class Test {

这属于特殊情况了,当面包数为43,每个盘子放5个面包时候,需要9个盘子;如果加1再除以2得22,这不不对了嘛,再想想
作者: chen_x    时间: 2014-3-11 13:10
胡建伟 发表于 2014-3-11 12:28
这属于特殊情况了,当面包数为43,每个盘子放5个面包时候,需要9个盘子;如果加1再除以2得22,这不不对了 ...

每个盘子5个面包的话,可以(breadNum+4)/5, 这样算的话,40个面包需要8个盘子,41~45个面包都是需要9个盘子,46个面包时就需要10个盘子,与实际相符。
每个盘子n个面包时,盘子数就是(breadNum+n-1)/n
这个公式应该是没错的,用数学方法可以递推证明下:每个盘子最多n个面包,面包数所有可能的情况就是kn,kn+1,kn+2,.....,kn+n-1, 其中k为所有正整数,这些情况中只有kn时是需要k个盘子,其它都是需要k+1个盘子
按公式(breadNum+n-1)/n计算,你可以大致推算一下,也是这个结果的,只有第一个面包数为kn时,运算结果是k, 其它kn+1,...,kn+n-1运算结果都是k+1。
说得有点多~~~





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2