Последние записи
- Как запустить программу указанную в Edit.Text
- Скачать файл с использованием потока
- Поиск слова в Memo
- Распаковщик формата .img из GTA San Andreas
- Подсчет количества повторяющихся букв в файле
- Простейший скрипт загрузки картинки с помощью php
- Рассылка. Выпуск 154
- Получение картинки с веб-камеры
- Скопировать определённый кусок image
- Сделать printscreen экрана и сохранить
11th
Ноя
Как циклически сдвинуть массив в C#?
Posted by Chas under Пост-обзор
Здравствуйте! Не могли бы помочь, как циклически сдвинуть массив в C# на k элементов?
существуют два принципиально разный подхода (сейчаc лень, но можете порыться, на форуме я как-то приводил примеры кода, правда, на Delphi):
- однопроходный. Каждый элемент сразу сдвигаем на столько элементов, на сколько надо. Это очень эффективно. Но тут возникают сложности, т.к. достатночно муторно вычислить, какой элемент с каким надо менять местами.
- циклический. Любой сдвиг на K элементов это К сдвигов на один элемент. А сдвиг на один элемент – это алгоритмически крайне просто.
Вот пример решения на основании второго подхода:
int[] a = new int[n] { 1, 2, 3, 4, 5 };
Console.WriteLine("Исходный массив:");
for (int i = 0; i < n; ++i)
Console.Write("\t" + a[i]);
Console.WriteLine();
Console.WriteLine("Введите k");
int k = Convert.ToInt16(Console.ReadLine());
for (int i = 0; i < k; ++i)
{
int aLast = a[n-1];
for (int j = n-1; j>0; j–)
a[j] = a[j-1];
a[0] = aLast;
}
Console.WriteLine("Новый массив: ");
for (int i = 0; i < n; ++i)
Console.Write("\t" + a[i]);
Console.WriteLine();
Console.ReadKey();

