2009-05-02 62 views
-4

这里是约束需要一种算法来解决这个问题

  • 我有三个桶(水)的能力10升,2升和50升。
  • 我会得到另一桶水,从0到100升
  • 我必须先填充桶10先,2下,50最后。任何额外的东西都可以处置。

如何用最少的代码行来实现最佳效果? while循环?想法请。

回答

3

每次补10升的桶,你的源代码桶中将少有10升。

每次填充2升桶时,您的源桶中将少有2升。

每次填满一个50升水桶时,您的源桶中将少有50升。

我们可以概括一下吗?

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

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

因为这是你填的金额,

每次填写的标准升一斗,你将不得不分(N,source_bucket_capacity)较少升源桶。

当您在源桶中有水时,请继续加注桶。当源桶清空或者没有更多目标桶时停止。

所以

  • 设置源斗。
  • 设置目标桶列表。
  • 而源桶是不是空的,你必须在目的地列表
    • 填充水桶拿到下一个目的地斗。
    • 填写为min(N,source_bucket_capacity)
    • 递减由分钟(N,source_bucket_capacity)源桶
0

如果你不想概括这个问题与任意容量的水桶任意数量的,那么你并不需要一个循环都:

名称桶A = 10,B = 2,分别为c = 50和d = 100。当d大于0时,从d中减去a,从d中减去a,从d中减去c。就这些了。

1

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

如果不限制您可以只使用stephan202回答

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

上面的代码将输出多少升被留在一个当其倒入其他三个桶(62)的总容量时,桶随机填充1-100升。

正如其他人已经指出的那样,你提出你的问题的方式几乎没有揭示你正试图解决的实际问题。我怀疑上面的解决方案是你应该提供的。但是因为你只要求最短的解决方案,所以就是这样。一条线。

相关问题