2012-05-02 34 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

相关问题