說我想均勻地分配y
項目到x
桶。如果x
是y
的倍數,則該分配將是偶數,如果不是,則每個存儲桶中的0
項可能會結束。例如:平均分配桶內「物品」(盡力而爲)
例如:我有3
料桶,我想分配2
料品。由於執行分區(2/3)
將導致每個桶有0
項。我該如何實現,分配1
,1
, 0
?
說我想均勻地分配y
項目到x
桶。如果x
是y
的倍數,則該分配將是偶數,如果不是,則每個存儲桶中的0
項可能會結束。例如:平均分配桶內「物品」(盡力而爲)
例如:我有3
料桶,我想分配2
料品。由於執行分區(2/3)
將導致每個桶有0
項。我該如何實現,分配1
,1
, 0
?
這種思維方式應該工作:
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.
注意唯一循環你所做的就是談論每個桶。你可以很容易地問一個桶號,看看有多少物品沒有循環!
如果你想知道,行「int extra =(i <= remainingItems)?1:0;」如果存儲桶編號小於或等於剩餘項目數,則返回1。否則,該行返回值0。這就是允許將所有物品分配到「儘可能均勻」的桶中。 – Drifter64
你的問題是含糊不清的,但是從itemNumber的分割中得到餘數(如果它們在列表或數組中,這可能是索引)以及作爲桶的索引將會給出的桶的數量您正在尋找的均勻分佈。
int bucketIndex = itemNumber % numberOfBuckets;
循環賽。我想計算'數字',因爲我不需要迭代。 – user1071840
我不明白。你能否用更多的信息更新你的問題,或者有一些輸入和期望輸出的方法簽名? – Tyler
第一y mod x
水桶將有(y div x) + 1
項目,其餘的將有y div x
項目
每個桶獲取y/x(整數除法)項目,y%x個桶獲得1個附加項目。
看起來你知道如何解決編程問題,但你正在尋找一個想法,我認爲你在帕斯卡三角形的答案,認爲有點不同於帕斯卡的三角形,把你的整個項目放到三角形的頂部單元格。 ..所以,其實,我認爲這不是最好的努力
我覺得你的問題太模糊,無法回答。你是否試圖實現一個java方法,它返回的桶,其中的項目? – Drifter64
我找到了一個解決方案,可以向您報告每個存儲桶中有多少項目。它會給你像(1,1,0)分配你想要的。 :) – Drifter64