如何将奇数拆分为指定数量的整数?C#代码结果不符求修正
正确实现奇数指定份数拆分的C#方法
你需要将一个奇数拆分为2至7个整数,要求拆分结果满足:
- 7拆分为4份得到
{1,2,2,2} - 5拆分为3份得到
{1,2,2}
原代码因错误使用Math.Round、求和逻辑混乱,导致输出不符合预期(例如7拆4份返回{1,2,2,3}),以下是基于整数除法商和余数的正确实现方案:
实现逻辑
核心思路是通过整数除法拆分基准值和余数,保证拆分后元素总和等于原奇数,且数值尽可能平均:
- 计算基准值:
baseVal = oddnum / divnum(整数除法,得到每份的基础数值) - 计算余数:
remainder = oddnum % divnum(表示需要在基础值上加1的元素个数) - 生成结果:先添加
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
相关产品推荐
相关产品推荐

