Pigeonhole问题:将不同类型的UIImage放入UIImageViews

joh*_*ohn 4 iphone algorithm math objective-c combinatorics

假设我有10个盒子和4种不同类型的彩球:​​黑色,蓝色,红色,绿色.我想在10个盒子中以大致相等的比例分配不同颜色的球.例如,一个可接受的解决方案是在10个盒子中放置2个黑色,2个蓝色,3个红色和3个绿色球.

现在,更具体地说,假设我有10个UIImageViews,以及可变数量的UIImages(Facebook,Twitter,Flickr等)放入这些UIImageViews中.如果我允许用​​户关闭某种类型,则可以有可变数量的类型(全部三种,只有两种,只有一种等).是否有一种有效的算法将可变数量的对象分配到静态数量的框中?

我能想到的最直接的方式,但我觉得它非常低效,就是有一个for循环,只需将每种类型的球(UIImage)的数量增加到一个盒子(UIImageView)中,直到球的总数为止等于盒子的数量.有没有更好的办法?

dre*_*ful 5

我想我会按照你的要求去做.

看起来你正在寻找一种div和mod数学.基本上长的分裂和剩余就像我们在二年级学习.我担心在目标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)
Run Code Online (Sandbox Code Playgroud)

因此,您知道要commonNumOfAllBallTypesInBoxes为每个盒子添加每种球类型.然后你知道为每个盒子添加一个球类型numOfExtraBallTypesnumOfBallTypes球.

上述结果如下:

numOfBoxes:11

numOfBallTypes:4

commonNumOfAllBallTypesInBoxes:2

numOfExtraBallTypes:3

它适用于任何动态:

numOfBoxes:73

numOfBallTypes:11

commonNumOfAllBallTypesInBoxes:6

numOfExtraBallTypes:7

我希望这有帮助.