将橙子分成不同大小的盒子。 Java Puzzle

时间:2016-03-01 13:40:38

标签: java methods

Theres三个盒子

用户输入橙子数量。

大盒子装20个,中号10个,小5个橘子装。

一个大盒子的运费是8.80美元,中盒子,6.00美元和小盒子4.50美元。

订单以最便宜的方式发货。

例如,52个橙子的订单将以四个方框装运:两个大,一个中等,一个小。

这就是它变得棘手的地方。

包装规则是完全填充大中型箱子;也就是说,盒子是完全包装好的。

只有小盒子可以有空格。例如,要运送52个橙子,您可以使用3个大盒子,但这样会使第三个盒子没有完全包装。

应显示运费,并在java中使用方法

有人愿意帮助一个老家伙学习java吗?

2 个答案:

答案 0 :(得分:1)

我不会为您提供解决方案,因为您需要帮助学习而不是解决

  

有人愿意帮助一个老家伙学习java吗?

我建议您执行以下操作:

  1. 定义一种算法,该算法将生成所有可能的送货方法
  2. 可选:定义"过滤器"这将自动跳过明显不好的运输方法
  3. 通过运输方式,找到最便宜的。
  4. 我建议使用Java-8-streaming - 它可以使您的算法简短易读

    可选的下一步:

    1. 重写您的代码以创建运输方法作为"树" - 所以你可以跳过明显比其他分支更贵的整个分支

答案 1 :(得分:1)

显然模数会告诉你你是否有橙色的数量,装在一个盒子里(中盒和大盒子的盒子已满),如果是的话,再试一次剩下的橘子,不要尝试用一个小盒子直到你没有剩下橙色。

这应该足够了,因为没有运送两个小盒子比一个大盒子便宜的情况。

编辑:我终于改变了主意,不需要模数。我使用了整数除法来使其工作。

 public static void main(String[] args) {
    int oranges = 15;

    int bigBoxes = oranges / 20;
    int mediumBoxes = (oranges-bigBoxes*20) / 10;
    int smallBoxes = ((oranges-bigBoxes*20-mediumBoxes*10)+4) / 5;

    System.out.println(String.format("big=%d, med=%d, small=%d", bigBoxes, mediumBoxes, smallBoxes));
}