如何将一个奇数除以得到 x 个整数?

问题描述 投票:0回答:2

如果我想将一个奇数(例如 7)除以 2 到 7,并且我想要一些整数的列表。 如果我用 4 占 7,我应该得到 {1, 2, 2, 2},或者如果我用 3 占 5,我想得到 {1, 2, 2}。

我该怎么做?

        static List<int> OddNumDiv(int oddnum, int divnum)
        {
            List<int> result = new List<int>();

            result.Add(oddnum / divnum);
            int sum = 0;

            for (int i = 0; i < divnum - 2; i++)
            {
                sum += (int)Math.Round((double)oddnum / divnum, MidpointRounding.AwayFromZero);
                result.Add((int)Math.Round((double)oddnum / divnum, MidpointRounding.AwayFromZero));
            }
            result.Add(oddnum - sum);

            return result;
        }

        static void Main(string[] args)
        {
            List<int> _7d4 = OddNumDiv(7, 4);
        }

返回 {1, 2, 2, 3} 而不是我需要的 {1, 2, 2, 2}

c# math integer division
2个回答
0
投票

不要将四舍五入的值添加到总和中。始终分别计算每个除法的商和余数。

以下是您所需解决方案的完整代码。

public static List<int> OddNumDiv(int oddnum, int divnum)
    {
        List<int> result = new List<int>();
        int quotient = oddnum / divnum; // Find the quotient when oddnum is divided by divnum
        int remainder = oddnum % divnum; // Find the remainder when oddnum is divided by divnum

        // Add quotient to the result list divnum-remainder times
        for (int i = 0; i < divnum - remainder; i++)
        {
            result.Add(quotient);
        }

        // Add quotient+1 to the result list remainder times
        for (int i = 0; i < remainder; i++)
        {
            result.Add(quotient + 1);
        }

        return result;
    }

这里是了解更多关于模运算符(%)的相关链接:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/modulus-operator


0
投票

samidinani 答案(模运算)中的想法完全相同,但 Linq 实现:

using System.Linq;

...

private static List<int> OddNumDiv(int oddnum, int divnum) => Enumerable
  .Range(0, divnum)
  .Select(i => oddnum / divnum + (i < divnum - oddnum % divnum ? 0 : 1))
  .ToList();

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.