2014-02-11 52 views
2

說我想均勻地分配y項目到x桶。如果xy的倍數,則該分配將是偶數,如果不是,則每個存儲桶中的0項可能會結束。例如:平均分配桶內「物品」(盡力而爲)

例如:我有3料桶,我想分配2料品。由於執行分區(2/3)將導致每個桶有0項。我該如何實現,分配1,1, 0

+2

我覺得你的問題太模糊,無法回答。你是否試圖實現一個java方法,它返回的桶,其中的項目? – Drifter64

+0

我找到了一個解決方案,可以向您報告每個存儲桶中有多少項目。它會給你像(1,1,0)分配你想要的。 :) – Drifter64

回答

2

這種思維方式應該工作:

package sandbox; 

public class Sandbox 
{ 

    public static void main(String[] args) 
    { 
     int numBuckets = 12; 
     int numItems = 34; 

     int itemsPerBucket = (numItems/numBuckets); 
     int remainingItems = (numItems % numBuckets); 

     for (int i = 1; i <= numBuckets; i++) 
     { 
      int extra = (i <= remainingItems) ? 1:0; 
      System.out.println("bucket " + i + " contains " + (itemsPerBucket + extra) + " items."); 
     } 
    } 
} 

這樣做的輸出:

bucket 1 contains 3 items. 
bucket 2 contains 3 items. 
bucket 3 contains 3 items. 
bucket 4 contains 3 items. 
bucket 5 contains 3 items. 
bucket 6 contains 3 items. 
bucket 7 contains 3 items. 
bucket 8 contains 3 items. 
bucket 9 contains 3 items. 
bucket 10 contains 3 items. 
bucket 11 contains 2 items. 
bucket 12 contains 2 items. 

注意唯一循環你所做的就是談論每個桶。你可以很容易地問一個桶號,看看有多少物品沒有循環!

+0

如果你想知道,行「int extra =(i <= remainingItems)?1:0;」如果存儲桶編號小於或等於剩餘項目數,則返回1。否則,該行返回值0。這就是允許將所有物品分配到「儘可能均勻」的桶中。 – Drifter64

0

你的問題是含糊不清的,但是從itemNumber的分割中得到餘數(如果它們在列表或數組中,這可能是索引)以及作爲桶的索引將會給出的桶的數量您正在尋找的均勻分佈。

int bucketIndex = itemNumber % numberOfBuckets; 
+0

循環賽。我想計算'數字',因爲我不需要迭代。 – user1071840

+0

我不明白。你能否用更多的信息更新你的問題,或者有一些輸入和期望輸出的方法簽名? – Tyler

4

第一y mod x水桶將有(y div x) + 1項目,其餘的將有y div x項目

2

每個桶獲取y/x(整數除法)項目,y%x個桶獲得1個附加項目。

-1

看起來你知道如何解決編程問題,但你正在尋找一個想法,我認爲你在帕斯卡三角形的答案,認爲有點不同於帕斯卡的三角形,把你的整個項目放到三角形的頂部單元格。 ..所以,其實,我認爲這不是最好的努力