【问题标题】:Pigeonhole problem: Placing different types of UIImages into UIImageViews鸽巢问题:将不同类型的 UIImages 放入 UIImageViews
【发布时间】:2011-05-04 02:38:41
【问题描述】:
假设我有 10 个盒子和 4 种不同类型的彩球:黑色、蓝色、红色、绿色。我想以大致相等的比例在 10 个盒子中分配不同颜色的球。例如,可接受的解决方案是在 10 个盒子中放置 2 个黑色、2 个蓝色、3 个红色和 3 个绿色的球。
现在,更具体地说,假设我有 10 个 UIImageView,以及可放入这些 UIImageView 中的各种类型的 UIImage(Facebook、Twitter、Flickr 等)。如果我允许用户关闭某种类型,则可以有可变数量的类型(全部三种,只有两种,只有一种等)。是否有一种有效的算法可以将可变数量的对象类型分配到静态数量的盒子中?
我能想到的最直接的方法,但我觉得它的效率非常低,是有一个 for 循环,然后将每种类型的球 (UIImage) 的数量递增到一个盒子 (UIImageView) 中,直到总数球的数量等于盒子的数量。有没有更好的办法?
【问题讨论】:
标签:
iphone
objective-c
algorithm
math
combinatorics
【解决方案1】:
我想我遵循你的要求。
您似乎正在寻找一种 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 添加到每个框。然后,您就知道在每个盒子中为 numOfExtraBallTypes 的 numOfBallTypes 球类型中再添加一个球。
以上结果为:
numOfBoxes: 11
numOfBallTypes: 4
commonNumOfAllBallTypesInBoxes: 2
numOfExtraBallTypes: 3
它适用于任何动态:
numOfBoxes: 73
numOfBallTypes: 11
commonNumOfAllBallTypesInBoxes: 6
numOfExtraBallTypes: 7
我希望这会有所帮助。