找出 X 集合中的最大可整除整数

Find Highest Divisible Integer In Set By X

正如标题所说,我想要以下内容:

Int32 GetHighest(Int32 Input , out Int32 Total) // function signiture

Set(4,3,2,1)// example
input = 7  // function returns 3 and out Total = 6 ---> correct
input = 7  // function returns 2 and out Total = 6 ---> Incorrect
input = 5  // function returns 2 and out Total = 4 ---> correct
input = 5  // function returns 3 and out Total = 3---> Incorrect

所以 GetHighest 应该 return 总计最高的结果,如果总计相等,那么它应该 return 最高除数的结果。

第一个例子 ---> 3 进入 7 两次。所以总和是 3x2 即 6

第二个例子---> 2进入7三次。所以总数是 2x3 即 6

第三个例子 ---> 2 进入 5 两次。所以总数是 2x2 也就是 4

第四个例子---> 3进5一次。所以总数是 3x1 也就是 3

    private Int32 GetHighest(Int32 y, out Int32 B)
    {
        var Set = new Int32[] { 4, 3, 2 };
        var Totals = new List<Int32>();
        foreach (var x in Set)
           Totals.Add(x * (y / x));  
        var Max = Totals.Max();
        var Maxs = Totals.Select((total, index) => new {T = total, index})
                    .Where(r=> r.T == Max).ToList();
        var Maximum = Maxs.Select(G => Set[G.index]).Max();
        B = Totals[Array.IndexOf(Set, Maximum)];
        return Maximum;
    }

我想如果你想做某事你必须自己做!

这是对您的代码的改编,不需要存储中间结果:

private Int32 GetHighest(Int32 y, out Int32 totalMax)
{
    var Set = new Int32[] { 4, 3, 2 };
    totalMax = int.MinValue;
    int itemMax = int.MinValue;
    foreach (var x in Set)
    {
       int total = x * (y / x);
       if(total >= totalMax && (total > totalMax || x > itemMax))
       {
           totalMax = total;
           itemMax = x;
       }
    }
    return itemMax;
}