2016-11-11 3 views
0

Ich habe ein Array als solche initialisiert:vorheriger Index in einem Array C#

int[] myArray = new int[] {9, 8, 7, 3, 4, 5, 6, 2, 1}; 

I dann einen für() -Schleife das Array für den höchsten Wert mit jedem Benutzer:

int maxValue = myArray.Max(); 
int maxIndex = myArray.ToList().IndexOf(maxValue); 

Es findet offensichtlich 9 als den höchsten Wert.

Ich möchte zuerst den zuvor indizierten Wert auf einen zufälligen Wert unterhalb des aktuellen maxValue, aber oberhalb von -1 setzen und die Suche nach dem nächsten maxValue fortführen und auf Konsole drucken.

(Wenn alle Werte einen Wert == 0 erreichen, dann stoppt die Simulation) < - diesen Teil kann ich tun.

Ist das möglich? Wenn das so ist, wie?

+0

Welches ist das Endziel, zweites Max? – Zinov

+0

Ich lese es 4 mal und verstehe immer noch nicht. Wie ist es, wenn Ihr Max Index bei 0 ist, welche Zahl ist unter Null, aber über -1? –

+0

@ Niyoko Yuliawan unter dem aktuellen maxValue, sucht es nach einem maxValue. Wenn dieser maxValue größer als 0 ist, wird dieser Wert reduziert. Wenn es keinen Wert größer als 0 gibt, stoppt es die Simulation. – Chamkey

Antwort

1

ich dies vielleicht erraten, was Sie wollen. Lass mich wissen, wie es für dich funktioniert.

using System; 
using System.Linq; 

public class Program 
{ 
    private static Random random = new Random(); 

    public static void Main() 
    { 
     int[] myArray = new int[] {9, 8, 7, 3, 4, 5, 6, 2, 1}; 
     Simulate(myArray); 

    } 

    static void Simulate(int[] myArray) 
    { 
     int maxValue = myArray.Max(); 
     Console.WriteLine(string.Join(" ",myArray)); 
     var continueSimulation = true; 
     do{ 

      int maxIndex = myArray.ToList().IndexOf(maxValue); 
      var randomValue = random.Next(0, maxValue); 
      myArray[maxIndex] = randomValue; 

      maxValue = myArray.Max(); 
      if (maxValue == 0) 
       continueSimulation = false; 

      Console.WriteLine(string.Join(" ",myArray)); 

     }while(continueSimulation); 
    } 
} 

Sie können es auf this Geige aus.

Hoffe, das hilft!

+0

Das ist es genau. Vielen Dank – Chamkey

+0

Gern geschehen. Froh, dass ich Helfen kann! –

0

Wenn Sie den zweiten Max suchen möchten, können Sie die Position des ersten markieren und mit demselben Ansatz fortfahren. Wie kann getan werden? 1- initialisiere ein Array von bool mit der gleichen Länge des Arrays, wo du das Maximum finden willst, dann finde das erste Maximum und markiere diese Position im zweiten Array mit true, wenn du das zweite max willst, mache eine Schleife durch das Array fragt nach dem Maximum und wenn dieses Element nicht im zweiten Array von Bool markiert ist. Schließlich erhalten Sie die zweite max. Eine weitere Idee ist, die die Werte in einer Liste und sobald Sie den max finden, entfernen Sie den max aus der Liste mit dem gleichen Algorithmus fortsetzen, aber mit einer Reihe von weniger Werten

static int Max(int [] num) 
{ 
    int max = num[0]; 

    for(int i = 0; i < num.Length; i ++) 
    { 
     if(num[i] > max) 
      max = num[i]; 
    } 

    return max; 
} 

static int SecondMax(int[]a) 
{ 
    if(a.Length < 2) throw new Exception("...."); 

    int count = 0; 
    int max = Max(a); 
    int[]b = new int[a.Length]; 

    for(int i = 0; i < a.Length; i ++) 
    { 
     if(a[i] == max && count == 0) 
     { 
      b[i] = int.MinValue; 
      count ++; 
     } 
     else b[i] = a[i]; 
    } 

    return Max(b); 
} 
0

Ehrlich gesagt fühlt sich die Frage ein wenig ungewöhnlich an. Wenn Sie also teilen, warum Sie das versuchen, könnte vielleicht jemand einen besseren Ansatz vorschlagen. Um jedoch Ihre ursprüngliche Frage zu beantworten, können Sie einfach den Zufallszahlengenerator von .NET verwenden.

int[] myArray = new int[] { 9, 8, 7, 3, 4, 5, 6, 2, 1 }; 
    Random random = new Random(); 

    for (int max = myArray.Max(); max > 0; max = myArray.Max()) 
    { 
     int index = myArray.IndexOf(max); 

     DoSomething(max); 

     myArray[index] = random.Next(0, max); 
    } 

Vom MSDN doco on Random, die obere Grenze ist exklusiv, was bedeutet, dass es eine Zufallszahl zwischen 0 und max-1, es sei denn, max == 0 erzeugen wird, in welchem ​​Fall es kehrt 0.