通过X设置最高可分整数

时间:2015-01-15 05:52:36

标签: c# c#-4.0 math

正如标题所说,我希望以下内容:

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应返回总数最高的结果,然后它应返回具有最高除数的结果。

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

第二个例子---> 2进3次三次。所以Total是2x3,即6

第三个例子---> 2进5次两次。总数是2x2,即4

第四个例子---> 3进5次。所以总数是3x1,即3

2 个答案:

答案 0 :(得分:1)

以下是对代码的修改,不需要存储中间结果:

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;
}

答案 1 :(得分:0)

    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;
    }

我想如果你想要完成某些事情,你必须自己做!