我有一个 size
元素数组,我有一个函数可以将它分成大致相等的部分。它通过使用 size/num_of_sections
设置第一个 size-1
部分的大小,并使用剩余部分设置最后一个部分的大小来实现这一点。代码很简单,工作正常,看起来像这样:
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
。
最佳答案
通常的方法是,当您可以将所有较大的部分分组时,
const int total=/*…*/,pieces=/*…*/;
const int base=total/pieces,extra=total%pieces;
然后第一个 extra
(可能是 0)件的大小为 base+1
并且其他的(pieces-extra
)件的大小为 基础
。
关于c++ - 将列表分成相等的部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58529819/