需要一种算法来解决这个问题

时间:2009-05-02 09:07:49

标签: java php algorithm

以下是约束

  • 我有三个水桶(水)容量10升,2升和50升。
  • 我将获得0到100升的另一桶水
  • 我必须按顺序填充第10个,第2个和第50个。任何额外的东西都可以处理。

使用最少的代码行如何才能做到最好?循环?想法。

4 个答案:

答案 0 :(得分:3)

每次装满10升水桶时,您的水桶中的水量就会减少10升。

每次装满2升水桶时,您的水桶中将减少2升。

每次填充50升水桶时,源水桶中的水量将减少50升。

我们可以概括一下吗?

每次填充N升桶时,源桶中的N将减少N个。

源存储桶中的数量不能少于零升,因此实际填充的数量是源存储桶中的数量和目标存储桶容量的较小值。

因为这是你填写的金额,

每次填充一桶N升时,源桶中的min(N,source_bucket_capacity)就会减少。

当您在源水桶中有水时,请继续装水桶。当源存储桶为空或您没有更多目标存储桶时停止。

所以

  • 设置源存储桶。
  • 设置目标存储桶列表。
  • ,而源存储桶不为空,并且您在目标列表中有未填充的存储桶
    • 获取下一个目标存储桶。
    • 将其填入min(N,source_bucket_capacity)
    • 将源存储桶减去min(N,source_bucket_capacity)

答案 1 :(得分:1)

我不明白,为什么你不能简单地填补水桶?你能更好地解释这个问题吗?我没有看到这个限制,请解释一下限制,如果有的话......

如果没有限制,您可以使用stephan202回答

答案 2 :(得分:0)

如果您不想将此问题推广到具有任意容量的任意数量的存储桶,那么您根本不需要循环:

分别命名桶a = 10,b = 2,c = 50和d = 100。从d减去a,b从d减去c,d大于0.这就是全部。

答案 3 :(得分:0)

<?php echo (($i = rand(1,100) - 62) > 0) ? $i : 0; ?>

上面的代码将输出一个随机装满1-100升的水桶中剩余的升数,当它倒入其他三个水桶的总容量时(62)。

正如其他人已经指出的那样,你提出问题的方式几乎没有显示出你想要解决的实际问题。我怀疑上面的解决方案是你应该提供的。但是,既然你只要求最短的解决方案,那么就是这样。一行。