2016-11-11 67 views
0

我有一個數組初始化爲這樣:上一頁索引C#

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

我然後有一個爲()循環每次搜索陣列的最高值使用:

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

它顯然不斷髮現9作爲最高價值。

我希望它先將索引值設置爲低於當前maxValue但高於-1的隨機值,然後繼續在數組中搜索下一個maxValue並將其打印到控制檯。

(如果所有值達到值== 0,則模擬停止)< - 這部分我知道該怎麼做。

這可能嗎?如果是這樣,怎麼樣?

+0

這是最後的目標,第二最大? – Zinov

+0

我讀了4次,仍然不明白。如果你的最大指數是0,那麼什麼數字低於零但是高於-1? –

+0

@ Niyoko Yuliawan低於當前maxValue,它正在搜索maxValue。如果maxValue大於0,那麼它會減少那個。如果它沒有遇到大於0的值,則停止模擬。 – Chamkey

回答

1

我想這可能是一個數組你想。讓我知道它是如何爲你工作的。

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); 
    } 
} 

您可以檢查出來的this小提琴。

希望這會有所幫助!

+0

就是這樣。非常感謝你 – Chamkey

+0

不客氣。樂意效勞! –

0

如果您想查找第二個最大值,可以標記第一個最大值的位置並繼續使用相同的方法。怎麼做? 1-初始化一個bool數組,其長度與要查找最大值的數組長度相同,然後找到第一個max,並將第二個數組中的位置標記爲true,如果要第二個max,則通過數組詢問最大值以及該元素是否未在第二個布爾數組中標記。最後你會得到第二個最大值。 另一個想法走的是值的列表,一旦你發現的最大,從列表中刪除最大,繼續使用相同的算法,但用更少的值

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

老實說,這個問題有點不同尋常,所以如果你分享你爲什麼要這樣做,也許有人可能會提出一個更好的方法。但是,要回答您的原始問題,您可以使用.NET的隨機數字生成器。

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); 
    } 

MSDN doco on Random,上限是排他性的,這意味着它會產生0和max-1之間的隨機數,除非最大== 0,在這種情況下,將返回0