Я не уверен, что полностью понял ваш вопрос.Но похоже, что вы действительно хотите повернуть содержимое массива.
Чтобы повернуть содержимое массива влево k раз.Вы можете сделать следующее:
- Реверс первых K элементов.
- Реверс остальных NK элементов.
- Реверс всего массива.
Пример:
N = 5, K = 3 и массив = [1 2 3 4 5]
- шаг 1: перевернуть первый3 элемента: [3 2 1 4 5]
- шаг 2: перевернуть оставшиеся 2 элемента: [3 2 1 5 4]
- шаг 3: перевернуть весь массив: [4 5 12 3]
C ++ функция, которая делает то же самое:
void move (int a[100], int n, int k) {
int t[100];
int i,j;
for (i=k-1,j=0; i>=0; i--,j++) t[j]=a[i];
for (i=n-1; i>=k; i--,j++) t[j]=a[i];
for (i=n-1,j=0; i>=0; i--,j++) a[j]=t[i];
}
Лучший способ сделать это в постоянном пространстве - сделать реверсирование на месте:
void arr_rev(int a[100], int start, int end) {
int temp;
for(;start<end;start++,end--) {
temp = a[start];
a[start] = a[end];
a[end] = temp;
}
}
void move2 (int a[100], int n, int k) {
arr_rev(a,0,k-1);
arr_rev(a,k,n-1);
arr_rev(a,0,n-1);
}