c++ - 将列表分成相等的部分?

标签 c++ c arrays partitioning

我有一个 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) );

唯一的问题是 sizenum_of_sections 的某些组合不能很好地拆分。例如,如果 size = 10num_of_sections = 6,则前四个部分各为 1 个元素,最后一个部分为 6 个元素。

我如何才能将其更改为一种更均匀地拆分它的算法,具体而言,以便所有部分的大小为 XX+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/

相关文章:

c# - 我如何为 SWIG 定义类型映射,将引用参数从 C++ 转换为 C#

c++ - 为什么编译会导致 missing template arguments 错误?

c++ - 如何在 C 或 C++ 中使用语句 block 定义函数?

c - 在 C 编程中,哪些数据类型可以与 enum 一起使用? enum 的大小是多少?

c - 为什么这段代码不能为大型数组提供正确的结果?

c++ - 确定一个数组是否包含在另一个数组中

c++ - 使用ACE时有没有办法使用线程局部变量?

c++ - 为什么指针用于 std::string.find?

c - openmp 代码执行期间的 "cygwin_exception::open_stackdumpfile error"

javascript - 如何 forEach where (angular.js)