将一个数平均分成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

相关推荐
刘马想放假12 小时前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
05Kevin14 小时前
lk每日冒险题--数据结构6.27
算法
To_OC1 天前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
千纸鹤安安1 天前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法
七牛开发者1 天前
MCP 到底是什么?为什么 Agent 都想接上它
算法·aigc·agent
北域码匠1 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
卷无止境2 天前
C++ 的Eigen 库全解析
c++