2009-05-02 60 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升。

正如其他人已經指出的那樣,你提出你的問題的方式幾乎沒有揭示你正試圖解決的實際問題。我懷疑上面的解決方案是你應該提供的。但是因爲你只要求最短的解決方案,所以就是這樣。一條線。

相關問題