У меня есть массив size
элементов, и у меня есть функция, которая разбивает его на примерно равные части. Он делает это, устанавливая размер первых size-1
секций с помощью size/num_of_sections
, и устанавливая размер последней секции с тем, что осталось. Код прост, работает правильно и выглядит так:
int section_size = size / num_of_sections;
int last_section_size = size - ( section_size * (num_of_sections - 1) );
Единственная проблема состоит в том, что есть некоторые комбинации size
и num_of_sections
, которые не очень хорошо разделяются. Например, если size = 10
и num_of_sections = 6
, то первые четыре раздела будут по 1 элементу каждый, а последний раздел будет состоять из 6 элементов.
Как я могу изменить это на алгоритм, который разделит егоболее равномерно, чтобы все разделы имели размер X
или X+1
? В приведенном выше примере первые четыре раздела будут иметь размер 2, затем последние два раздела будут по 1 каждый. Очевидно, что должна быть создана третья переменная, которая указывает номер раздела, где все предыдущие разделы вплоть до включительно имеют размер X
, а все последующие - размер X+1
.