将一个数平均分成N等份

有这样一个场景,我有一个已知数字,还已知分成N份。但是要分的平局一些。如果数字为120,要分为9份。那么可以分成8个14和,1个8。但显然这不是最平局方法。最平局的方式应该是3个14,6个13。

下面给出代码,拿到最平局的分法。原理就是先整除,然后再将余数分配到每一个上,比如120%9=3。120//9=13。那么就是3个(13+1),其余的都是13。

#include 
#include 

std::vector splitIntoEqualParts(int number, int N) {
    std::vector result(N, number / N); // 初始化每份为平均值
    int remainder = number % N; // 计算余数

    // 将余数逐个分配给每一份
    for (int i = 0; i < remainder; ++i) {
        result[i] += 1;
    }

    return result;
}

int main() {
    int number = 120;
    int N = 9;

    std::vector parts = splitIntoEqualParts(number, N);

    std::cout << number << " 分成 " << N << " 份,每份为:";
    for (int part : parts) {
        std::cout << part << " ";
    }
    std::cout << std::endl;

    return 0;
}
120 分成 9 份,每份为:14 14 14 13 13 13 13 13 13 

----------------------------------分割线---------------------------------------------------------------------------

在此基础之上,我想拿到每一份的索引,比如0-14,14-28,28-42 42-55  55-68等等

首先计算strat 如果当前份数小于余数,那么说明余数还没分配完。用上面的例子话第0份的长度为14(120/9 + 1),start值为 0 *14。end为start + 步长

如果当前份数大于等于余数,如果是第3份,那么余数已经分配完了,那么这一份的长度为13 (120/9)。start为 3*13 +3(余数) end为 start+13

你可能感兴趣的:(c++,算法,数据结构)