2010-12-12 8 views
-1

J'ai besoin d'aide C#. J'ai un tableau d'entiers avec 5 valeurs:Trouver la plus grande valeur du sous-ensemble du tableau


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

Je dois trouver la plus grande valeur pour toute combinaison de trois valeurs (10 possibilités de combinaison), puis réorganiser les valeurs ainsi que les 3 valeurs qui ont la plus grande somme sont dans les 3 dernières positions.

+6

Vous devez faire plus que simplement afficher vos besoins en tant que question. Dites-nous certaines des choses que vous avez essayées; donnez-nous des preuves que vous avez réfléchi à cette question et à la meilleure façon de la résoudre. De préférence, montrez-nous un exemple de code qui ne fonctionne pas correctement. Mais le plus important, * poser une question réelle *. –

+0

devoirs? (15 caractères ...) –

+1

trouvé, 10 est le plus grand :) –

Répondre

1

L'algorithme est:

  1. Trier le tableau dans l'ordre croissant
  2. 3 derniers éléments sont les 3 plus grands éléments de la tableau ie la combinaison avec la plus grande somme
  3. Trouvez la somme des plus grands éléments
  4. Stocke les éléments non les plus volumineux dans le tableau des résultats, en conservant ainsi l'ordre d'origine.
  5. Ajoutez les éléments les plus volumineux à la fin du tableau de résultats.

Le code est quelque chose comme ça (il peut être optimisé),

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

C'est juste le tableau trié par ordre croissant.

arrayValues.sort() 

devrait fonctionner et la liste des numéros dans l'ordre croissant

+1

Je pense que vous voulez dire 'Array.Sort (arrayValues);' –

+0

@Cody: Oui Désolé, j'utilise IEnumerable la plupart du temps et j'ai tendance à obtenir Array.sort() et IEnumerable.sort() mélangé – gprasant

+1

Il n'y a ni un 'Array.sort' ni un' IEnumerable.sort'. Il existe un 'Array.Sort' mais il n'y a pas de' IEnumerable.Sort'. – jason

Questions connexes