2011-05-04 27 views
4

假設我有10個盒子和4種不同類型的綵球:​​黑色,藍色,紅色,綠色。我想以大致相同的比例在10個盒子中分配不同顏色的球。例如,一個可接受的解決方案是在10個盒子中放置2個黑色,2個藍色,3個紅色和3個綠色球。Pigeonhole問題:將不同類型的UIImage放入UIImageView中

現在,更具體地說,假設我有10個UIImageViews和可變數量的UIImages(Facebook,Twitter,Flickr等)放入這些UIImageView中。如果我允許用​​戶關閉某種類型,則可以有多種類型(全部三種,只有兩種,只有一種等)。是否有一種有效的算法將可變數量的對象分配到靜態數量的框中?

我能想到的最直接的方式,但我覺得它非常低效,是有一個for循環,只是增加每個類型的球(UIImage)放置到一個盒子(UIImageView)的數量,直到球的總數等於盒子的數量。有沒有更好的辦法?

回答

5

我想我遵循你的要求。

看來你正在尋找一種div和mod數學類型。基本上長期分工和剩下的就像我們在二年級學習。恐怕我不知道在Objective-C中正確的速記。希望有人可以補充一點。

int numOfBoxes = 11; 

int numOfBallTypes = 4; 

int commonNumOfAllBallTypesInBoxes = numOfBoxes/numOfBallTypes; //this should be an int division result of 2 

int numOfExtraBallTypes = numOfBoxes - (commonNumOfAllBallTypesInBoxes * numOfBallTypes); //this should be a remainder of 3) 

因此,你知道每個球的每個球增加commonNumOfAllBallTypesInBoxes。然後,您知道要爲每個框中的numOfBallTypes球類型添加一個numOfExtraBallTypes的球。

用於上述的結果是:

numOfBoxes:11

numOfBallTypes:4

commonNumOfAllBallTypesInBoxes:2

numOfExtraBallTypes:3

而且它適用於任何動態:

numOfBoxes:73個

numOfBallTypes:11個

commonNumOfAllBallTypesInBoxes:6個

numOfExtraBallTypes:7

我希望這有助於。

+0

+1 for the answer without loop – 2011-05-04 04:41:32