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

相关推荐
-dzk-2 小时前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
风筝在晴天搁浅2 小时前
hot100 78.子集
java·算法
Jasmine_llq2 小时前
《P4587 [FJOI2016] 神秘数》
算法·倍增思想·稀疏表(st 表)·前缀和数组(解决静态区间和查询·st表核心实现高效预处理和查询·预处理优化(提前计算所需信息·快速io提升大规模数据读写效率
超级大只老咪2 小时前
快速进制转换
笔记·算法
m0_706653232 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你913 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
qq_423233903 小时前
C++与Python混合编程实战
开发语言·c++·算法
TracyCoder1233 小时前
LeetCode Hot100(19/100)——206. 反转链表
算法·leetcode
m0_715575343 小时前
分布式任务调度系统
开发语言·c++·算法