Проблема Pigeonhole: размещение различных типов UIImages в UIImageViews - PullRequest
4 голосов
/ 04 мая 2011

Допустим, у меня есть 10 коробок и 4 разных типа цветных шаров: черный, синий, красный, зеленый.Я хотел бы распределить шары разного цвета по 10 коробкам в примерно равных пропорциях.Например, приемлемым решением было бы поместить 2 черных, 2 синих, 3 красных и 3 зеленых шарика между 10 коробками.

Теперь, чтобы быть более конкретным, скажем, у меня есть 10 UIImageViews и переменное количество типов UIImage (Facebook, Twitter, Flickr и т. Д.) Для размещения в этих UIImageViews.Если я позволю пользователю отключить определенный тип, может быть переменное количество типов (все три, только два, только один и т. Д.).Существует ли эффективный алгоритм для распределения переменного числа типов объектов в статическое число блоков?

Самый простой способ, который я могу придумать, но я чувствую, что его ужасно неэффективно, это иметь цикл forи просто увеличивайте количество шариков каждого типа (UIImage) для помещения в коробку (UIImageView), пока общее количество шариков не станет равным количеству коробок.Есть ли лучший способ?

1 Ответ

5 голосов
/ 04 мая 2011

Я думаю, что следую тому, что вы просите.

Кажется, вы ищете тип div и mod math.В основном долгое деление и остатки, как мы учимся во 2-м классе.Боюсь, что я не знаю правильного сокращения для этого в target-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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...