将一个数平均分成N等份

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

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

cpp 复制代码
#include <iostream>
#include <vector>

std::vector<int> splitIntoEqualParts(int number, int N) {
    std::vector<int> 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<int> parts = splitIntoEqualParts(number, N);

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

    return 0;
}
cpp 复制代码
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

相关推荐
Asa121385 分钟前
Nature Microbiology|跨微生物界菌株水平传播推断的新算法TRACS
算法
_君莫笑7 分钟前
Qt+Qml前后端分离上位机软件技术方案
c++·qt·用户界面·qml
叼烟扛炮18 分钟前
C++ 知识点22 函数模板
开发语言·c++·算法·函数模版
Tisfy22 分钟前
LeetCode 2553.分割数组中数字的数位:模拟(maybe+翻转)——java也O(1)
java·数学·算法·leetcode·题解·模拟·取模
平行侠26 分钟前
33水库抽样 - 从未知大小的流中等概率采样
数据结构·算法
吴声子夜歌34 分钟前
Java——Integer与二进制算法
java·算法
Controller-Inversion35 分钟前
42. 接雨水
数据结构·算法·leetcode
Controller-Inversion36 分钟前
33. 搜索旋转排序数组
数据结构·算法·leetcode
￰meteor43 分钟前
【移动语义与移动构造】
c++
陆水A1 小时前
运输时效预测模型:静态路由时效的计算与验证
大数据·人工智能·算法·spark·数据库开发·etl工程师