我能够实现太平庸的代码,以便将数组循环移动一个值。您需要以某种方式通过 k 值实现移位,并且您不能使用任何函数,只能使用循环。我请求你的帮助!
我的代码:
#include <iostream>
using namespace std;
int main()
{
const int N = 4;
int arr[N] = { 1, 2, 3, 4 };
int el = arr[0];
for (int i = 1; i < N; ++i)
arr[i - 1] = arr[i];
arr[N - 1] = el;
for (int i = 0; i < N; ++i)
cout << arr[i] << " ";
}
一般的循环移位算法很容易通过颠倒元素的顺序来实现。例如,考虑一个数组
必须向右移动 4 个位置。这意味着元素 ijk l 应该在左边。当元素的顺序颠倒时,它们会以相反的顺序结束:
但是如果你现在只扩展前 4 个元素,它们就在他们的位置上......
剩下的就是扩展第二部分——剩下的 8 个元素:
就是这样,我们得到了我们需要的东西。
现在仍然需要在代码中实现它。让我们编写一个函数,用于将数组从第 i 个元素反转为第 j 个元素。
现在转变很容易写:
很明显,对于大的,
k您需要将除以的余数N,对于相反方向的移动,取负值并将其带入从 0 到 的范围内N-1。