首页 文章

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

提问于
浏览
4

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

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

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

1 回答

  • 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)
    

    因此,您知道要为每个框添加每种球类型的 commonNumOfAllBallTypesInBoxes . 然后你知道在每个方框中为 numOfBallTypes 球类型添加一个球 .

    The results for the above are:

    numOfBoxes:11

    numOfBallTypes:4

    commonNumOfAllBallTypesInBoxes:2

    numOfExtraBallTypes:3

    And it works for any dynamic:

    numOfBoxes:73

    numOfBallTypes:11

    commonNumOfAllBallTypesInBoxes:6

    numOfExtraBallTypes:7

    我希望这有帮助 .

相关问题