我无法弄清楚如何正确地将数组中的元素向右移动 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++;
}
结果垂直打印。
最佳答案
我知道这是一个老问题,但我认为为将数组元素向右移动 1 的任务提供完整的代码很有用。 一种想法是从末尾开始,将每个元素替换为其左邻居。由于一开始我们覆盖了结束元素,因此我们将保存它并将其放在循环后第一个槽的最终位置。
代码:
#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]);
}
}
关于c - 将数组中的元素右移 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43271755/