2017-02-07 6 views
0

Мне нужен алгоритм, который будет вытеснять элемент массива из первого индекса и нажимать следующий элемент (из исходного массива на последний индекс) до тех пор, пока не будет найден соответствующий набор элементов.алгоритм для смещения элемента массива

Как показано ниже:

Original array : {10,20,30,40,50,60,70,80,90,100,110,120} 

1st iteration : 10,20,30,40 
2nd iteration : 20,30,40,50 
3rd iteration : 30,40,50,60 
4th iteration : 40,50,60,70 .... and so on until the matching criteria set found. 

Логика должна итерацию до требуемого набора элементов массива найден (на основе некоторых расчетов элементов)

+0

Это похоже на довольно тривиальную проблему, какой код вы уже пробовали? – Ben

+2

Почему вы просто не используете счетчик, который увеличивается на 1 до array.Length - 5 – ViVi

+0

Пока вы можете изменить массив, если вы просто ищете подмножество из 5 элементов, нет необходимости. Итерации через него с использованием начальных/конечных индексов 5 элементов отдельно и/или рычаг 'ArraySegment', чтобы сделать легкие вычисления в наборе из 5. –

ответ

4

Ваш вопрос расплывчатым один;. если вы хотите сдвиг отправную точку:

int array = new[] {10,20,30,40,50}; 

    for (int shift = 0; shift < array.Length; ++shift) { 
    for (int i = shift; i < array.Length; ++i) { 
     int value = array[i]; 

     Console.Write(value); 
     Console.Write(", "); 
    } 

    Console.WriteLine(); 
    } 

Результат:

10, 20, 30, 40, 50, 
    20, 30, 40, 50, 
    30, 40, 50, 
    40, 50, 
    50, 

Если вы хотите вращать массив, который я предлагаю по модулю арифметика:

for (int shift = 0; shift < array.Length; ++shift) { 
    for (int index = 0; index < array.Length; ++index) { 
     int i = (shift + index) % array.Length; 

     int value = array[i]; 

     Console.Write(value); 
     Console.Write(", "); 
    } 

    Console.WriteLine(); 
    } 

Итог:

10, 20, 30, 40, 50, 
    20, 30, 40, 50, 10, 
    30, 40, 50, 10, 20, 
    40, 50, 10, 20, 30, 
    50, 10, 20, 30, 40, 
Смежные вопросы