You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将奇数拆分为指定数量的整数?C#代码结果不符求修正

正确实现奇数指定份数拆分的C#方法

你需要将一个奇数拆分为2至7个整数,要求拆分结果满足:

  • 7拆分为4份得到 {1,2,2,2}
  • 5拆分为3份得到 {1,2,2}

原代码因错误使用Math.Round、求和逻辑混乱,导致输出不符合预期(例如7拆4份返回{1,2,2,3}),以下是基于整数除法商和余数的正确实现方案:

实现逻辑

核心思路是通过整数除法拆分基准值和余数,保证拆分后元素总和等于原奇数,且数值尽可能平均:

  1. 计算基准值:baseVal = oddnum / divnum(整数除法,得到每份的基础数值)
  2. 计算余数:remainder = oddnum % divnum(表示需要在基础值上加1的元素个数)
  3. 生成结果:先添加divnum - remainder个基准值,再添加remainder个基准值+1,这样既满足总和要求,也符合示例的数值分布。

正确代码

static List<int> OddNumDiv(int oddnum, int divnum)
{
    List<int> result = new List<int>();
    
    int baseVal = oddnum / divnum;
    int remainder = oddnum % divnum;
    
    // 添加基准值元素
    for (int i = 0; i < divnum - remainder; i++)
    {
        result.Add(baseVal);
    }
    
    // 添加基准值+1的元素
    for (int i = 0; i < remainder; i++)
    {
        result.Add(baseVal + 1);
    }
    
    return result;
}

static void Main(string[] args)
{
    List<int> _7d4 = OddNumDiv(7, 4); // 返回 {1,2,2,2}
    List<int> _5d3 = OddNumDiv(5, 3); // 返回 {1,2,2}
}

结果验证

  • 输入(7,4):baseVal=1,remainder=3,生成1个1和3个2,总和为1+2*3=7,符合预期。
  • 输入(5,3):baseVal=1,remainder=2,生成1个1和2个2,总和为1+2*2=5,符合预期。

内容的提问来源于stack exchange,提问作者HopeCube

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 23:27:29