我无法弄清楚如何正确地将数组中的元素向右移动1.数组被初始化为[1 ,2, 3, 4, 5]
。因此,当我转移时,结果应为[2, 3, 4, 5, 1]
,但结果为[2, 3, 4, 5, 0]
,我不知道为什么。以下是我到目前为止的情况 -
for(k = 0; k <= n - 1; k++){
array[k] = array[k+1];
}
printf("Array is now:\n");
k = 0;
while(k < n) {
printf("x[%d] = %f\n", k, array[k]);
k++;
}
结果垂直打印。
答案 0 :(得分:1)
我知道这是一个老问题,但是我认为为将数组元素向右移1的任务提供完整的代码很有用。 一种想法是从头开始,然后将每个元素替换为其左侧的邻居。从一开始,我们将覆盖end元素,因此我们将保存它并将其放在循环后的第一个插槽中的最后位置。
代码:
#include <stdio.h>
void rotate_right(int* a, const int n) {
if (n < 1) return;
const int temp = a[n - 1];
for (int i = n - 1; i > 0; i--) {
a[i] = a[i - 1];
}
a[0] = temp;
}
int main() {
int a[] = { 1 , 2, 3, 4, 5 };
const int n = sizeof(a) / sizeof(a[0]);
rotate_right(a, n);
for (int i = 0; i < n; ++i) {
printf("%d ", a[i]);
}
}
答案 1 :(得分:0)
这是右移1的基本代码。如果你想要一个可以使用任何索引右移的通用代码,我建议使用一个变量。
//array elements are from index 0 to n-1
int tempData = array[0]; // if right shift is only by 1
for(k = 0; k < n-1; k++){
array[k] = array[k+1];
}
array[n-1] = tempData; //reinstall the value of first index to last index
printf("Array is now:\n");
k = 0;
while(k < n) {
printf("x[%i] = %d\n", k, array[k]);
k++;
}