解决方案 »

  1.   

    晕我觉得我写的还是挺清楚的吧,就是ABCD这四数之间进行配比取出最大化
      

  2.   

    嗯是的,就是,ABCD之间只能是三个三个的进行配,然后,以每一组中最少的为准,例A:0   B:2  C:5   D:3
    因为A为0所以只能是BCD之间进行配,且只能配出2个,
      

  3.   

    通过Math.Min来获取最小,代码等VS打开了敲一个
      

  4.   

    /// <summary>
            /// 
            /// </summary>
            /// <param name="seeds">ABCD顺序对应的值,如[10,12,20,8]</param>
            /// <param name="idxs">哪些索引对应的值需要获取最小值</param>
            /// <returns></returns>
            public int GetMinValue(int[] seeds, int[] idxs)
            {
                int minValue = 0;
                if (seeds != null && seeds.Length == 4
                    && idxs != null && idxs.Length == 3 && idxs.Max() < 4 && idxs.Min() >= 0 && idxs.Distinct().Count() == 3)
                {
                    minValue = Math.Min(seeds[idxs[0]], seeds[idxs[1]]);
                    minValue = Math.Min(minValue, seeds[idxs[2]]);
                    if (minValue > 0)
                    {
                        //已获取最小匹配值,相应位置移除
                        foreach (var i in idxs)
                        {
                            seeds[i] -= minValue;
                        }
                    }
                }
                return minValue;
            }
      

  5.   

    你好,感谢你提供的代码,刚才我试了下,需要指定输入 int[] idxs这个数组中的下标索引,也就是说,每一次获取的时候都需要手动输入,如果能自动进行就最好了,另外,你这个第一个参数的数组在执行一遍后,应该把值保存下来,然后再给第二次去配比,否则,每次都会用到原始的值去计算,不过,还是感谢你的代码意见,我自己再研究下,看看能不能再改进下,感谢,上分。
      

  6.   

    int[] seeds因为只是修改内部值,所以不用ref值得变化也会体现在方法调用后,你直接调用两次方法就知道了,至于下标的问题,因为你没有如何组合的规则,所以你需要在方法外部写一段组合规则你好,感谢你提供的代码,刚才我试了下,需要指定输入 int[] idxs这个数组中的下标索引,也就是说,每一次获取的时候都需要手动输入,如果能自动进行就最好了,另外,你这个第一个参数的数组在执行一遍后,应该把值保存下来,然后再给第二次去配比,否则,每次都会用到原始的值去计算,不过,还是感谢你的代码意见,我自己再研究下,看看能不能再改进下,感谢,上分。