2010-12-12 2 views
-1

Мне нужна помощь C#. У меня есть массив целых чисел с 5 значениями:Найти наибольшее значение подмножества массива


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

мне нужно найти наибольшее значение для любой комбинации из трех значений (10 возможностей комбинирования), а затем переставить значения, так что 3 значения, которые имеют наибольшую сумму находятся в последних 3 позициях.

+6

Вы должны сделать больше, чем просто разместить ваши требования, как вопрос. Расскажите нам о некоторых вещах, которые вы пробовали; дайте нам некоторые доказательства того, что вы подумали об этом вопросе и как лучше всего его решить. Предпочтительно, покажите нам образец кода, который не работает должным образом. Но самое главное, * задайте реальный вопрос *. –

+0

домашнее задание? (15 символов ...) –

+1

найдено, 10 наибольшее :) –

ответ

1

Алгоритм:

  1. Сортировка массива в порядке возрастания
  2. Последние 3 элемента являются 3 крупнейших элементы в массив, т.е. комбинация с наибольшей суммой
  3. Найти сумму самых крупных элементов
  4. Храните не самые большие элементы в массиве результатов, сохраняя при этом первоначальный порядок.
  5. Примите самые большие элементы в конце массива результатов.

код что-то вроде этого (он может быть оптимизирован),

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 
0

Это всего лишь массив отсортированный по возрастанию.

arrayValues.sort() 

должен работать и перечислить номера в порядке возрастания

+1

Я думаю, что вы имеете в виду 'Array.Sort (arrayValues);' –

+0

@Cody: Yeah Извините, я использую IEnumerable большую часть времени, и я, как правило, получаю Array.sort() и IEnumerable.sort() смешано – gprasant

+1

Нет ни одного 'Array.sort' или' IEnumerable.sort'. Существует «Array.Sort», но нет «IEnumerable.Sort». – jason

Смежные вопросы