C# 求数组子集的最大值

C# 求数组子集的最大值,c#,C#,我需要一些帮助。我有一个包含5个值的整数数组: Int[] arrayValues = { 10, 8, 6, 5, 3 }; 我需要为三个值的任意组合(10种组合可能性)找到最大值,然后重新排列这些值,使总和最大的3个值位于最后3个位置。这只是按升序排序的数组 arrayValues.sort() 应该工作并按升序列出数字算法是: 按升序对数组排序 最后3个元素是数组中最大的3个元素,即总和最大的组合 求最大元素的和 将非最大元素存储在结果数组中,从而保持原始顺序 将最大的元素追加到结果

我需要一些帮助。我有一个包含5个值的整数数组:


Int[] arrayValues = { 10, 8, 6, 5, 3 };

我需要为三个值的任意组合(10种组合可能性)找到最大值,然后重新排列这些值,使总和最大的3个值位于最后3个位置。

这只是按升序排序的数组

arrayValues.sort()
应该工作并按升序列出数字

算法是:

  • 按升序对数组排序
  • 最后3个元素是数组中最大的3个元素,即总和最大的组合
  • 求最大元素的和
  • 将非最大元素存储在结果数组中,从而保持原始顺序
  • 将最大的元素追加到结果数组的末尾
  • 代码是这样的(可以进行优化)

    int[]orginalArray={10,8,6,5,3};
    int[]copyArray=新的int[orginalArray.Length];
    int[]resultArray=newint[orginalArray.Length];
    //复制原始数组
    复制(orginalArray,0,copyArray,0,orginalArray.Length);
    //按升序对复制的数组进行排序(最后3个元素是最大的3个元素)
    排序(copyArray);
    //数组来存储最大的元素
    int[]最大=新int[3];
    对于(int i=copyrarray.Length-3,j=0;i对于(int i=max.Length-1,j=0;i您需要做的不仅仅是将您的需求作为一个问题发布。告诉我们您尝试过的一些事情;给我们一些证据证明您考虑过这个问题,以及如何最好地解决它。最好向我们展示一个无法正常工作的代码示例。但最重要的是,问一个实际的问题。发现,10是最棒的:)所以变成了“请做我的家庭作业”网站?我想你的意思是
    Array.Sort(arrayValues);
    @Cody:是的,对不起,我大部分时间都使用IEnumerable,我倾向于使用Array.Sort()和IEnumerable.Sort()这里既没有
    数组.sort
    也没有
    IEnumerable.sort
    。这里有
    数组.sort
    ,但没有
    IEnumerable.sort
    int[] orginalArray = { 10, 8, 6, 5, 3 };
    int[] copyArray = new int[orginalArray.Length];
    int[] resultArray = new int[orginalArray.Length];
    
    // Make a copy of the orginal array
    Array.Copy(orginalArray,0, copyArray, 0,orginalArray.Length);
    
    // Sort the copied array in ascendng order (last 3 elements are the largest 3 elements)
    Array.Sort(copyArray);
    
    // Array to store the largest elements
    int[] largest = new int[3];
    
    for (int i = copyArray.Length - 3, j = 0; i < copyArray.Length; i++, j++)
    {
        largest[j] = copyArray[i];
    }
    
    // Sum of the largest elements
    int largestSum = largest.Sum();
    
    // Copy the non largest elements to the result array (in the original order)
    for (int i = 0, j=0; i < orginalArray.Length; i++)
    {
        if (!largest.Contains(orginalArray[i]))
        {
            resultArray[j++] = orginalArray[i];
        }
    }
    
    // Copy the largest elements to the last 3 positions
    for(int i=largest.Length - 1, j=0;i<resultArray.Length;i++, j++)
    {
        resultArray[i] = largest[j];
    }
    
    // Result - resultArray[] : 5 3 6 8 10
    // Largest sum combination - largest[]: 6 8 10
    // Sum of largest combination - largestSum: 24