2012-05-02 47 views
0

我有以下情況下陣列的具體序列:如何獲得給定的陣列大小和開頭

列表或數組.the大小是可變i從1之間的用戶12獲得。

如果尺寸是3,那麼該陣列{1,2,3}

如果尺寸是5,則數組{1,2,3,4,5}

現在開始也是一個變量。

我想獲得的順序是:

如果大小12爲例,剛開始是9例如

我想這個特定的順序如下結果。

9,10,11,12,1,2,3,4,5,6,7,8

我的意思是我給定初開始直到那時的最後一個項目,如果開始不1然後我繼續1直到開始。

我這樣做,但它是專門針對大小12

與此代碼:


 int[] arr = new int[12]; 
     int month = 9;//input from the user 
     List<int> source = new List<int>(); 
     while (month <= 12) 
     { 
      source.Add(month); 
      month++; 
     } 
     if (source.Count < 12) 
     { 
      for (int i = 1; i < source[0]; i++) 
      { 
       source.Add(i); 
      } 
     } 

我想更通用的解決方案,以允許可變大小的不只是12

+0

你幾乎接近。第1行不需要數組變量。只需要一些int變量,如int lenght = 12。現在在while循環中用可變長度替換12,如果條件成立。 編輯:你也可以給一個函數輸入一個長度,它返回12個月數,30或31個天數等等 –

+0

請在下面找到三個解決方案 –

回答

2

我已測試過它,它的工作原理

   int arrsize = Convert.ToInt32(Console.ReadLine()); 
       int[] arr = new int[arrsize]; 
       int month = Convert.ToInt32(Console.ReadLine());//input from the user 
       List<int> source = new List<int>(); 
       while (month <= arrsize) 
       { 
        source.Add(month); 
        month++; 
       } 
       if (source.Count < arrsize) 
       { 
        for (int i = 1; i < source[0]; i++) 
        { 
         source.Add(i); 
        } 
       } 
       foreach (int i in source) 
        Console.Write(i); 

請添加像數組大小一定條件下應不超過一個月,用戶總是輸入整數,做到在嘗試捕捉好的做法......等等等等

使用來自其他答案有些邏輯後,我想想下面的代碼好多了。

   int arrsize = Convert.ToInt32(Console.ReadLine()); 
       int month = Convert.ToInt32(Console.ReadLine());//input from the user 
       List<int> source = new List<int>(); 
       int temp = 0; 
       for (int i = 0; i < arrsize; i++) 
       { 
        temp = i + month; 
        if (temp != arrsize) 
         source.Add(((i + month) % arrsize)); 
        else 
         source.Add(arrsize); 
       } 

第二種方法具有更低的複雜性不僅爲O(n),因爲它僅使用一個循環,而2

第三種解決方案是更簡單的:)

   for (int i = 0; i < size; i++) 
       { 
        if (i < month) 
         source.Add(i + month); 
        else 
         source.Add((i - month) + 1); 
       } 

希望它幫助。

2

怎麼是這樣的:

 static IEnumerable<int> GetSequence(int size, int beginning) 
     { 
      return Enumerable.Range(beginning, size).Select(i => 1 + (i - 1) % 12); 
     } 

您可以更改號碼12到方法的第三個參數。

+0

'12'是大小? –

+0

@just_name是的,這是我們再次「環繞」到1的值。 –

+0

這是12位硬編碼解決方案。他想要一個通用的。有些東西像%尺寸。但我喜歡你的解決方案優雅和簡單:) –

1
static int[] Sequence(int size, int start) 
{ 
    start--; 
    int[] result = new int[size]; 

    for (int i = 0; i < size; i++) 
    { 
     result[i] = ((i + start) % size) + 1; 
    } 

    return result; 
} 
+0

你正確的代碼將int int temp = 0; (int i = 0; i

+0

原因是12%12將是0,所以當尺寸與i +相同時,你就不需要做%了。 –

+0

我的代碼產生afaik正確的結果。您的優化將使用賦值語句和if語句取代模運算。我懷疑它是否包含更優化或更正確的代碼。 – faester

相關問題