右旋操作
Right rotation operation
int main()
{
int shiftSteps, newposition;
int numbers[10], numberscopy[10];
cin >> shiftSteps;
for (int i = 0; i < 10; i++)
cin >> numbers[i];
for (int i = 0; i < 10; i++)
numberscopy[i] = numbers[i];
//----------------------------------------
for (int i = 0; i < 10; i++)
{
newposition = (i + shiftSteps) % 10;
numbers[newposition] = numberscopy[i];
}
for (int i = 0; i < 10; i++)
cout << numbers[i] << " ";
}
我写这段代码是为了用辅助数组向右旋转 10 个数字 "numberscopy",但我想在没有辅助数组的情况下重写代码,但我不知道如何。
您可以就地旋转数组,即不使用带有 std::rotate 的辅助数组,这是一种标准算法。
std::rotate(numbers, numbers + shiftSteps, numbers + 10);
在没有辅助数组的情况下,可以利用反转算法通过“shiftSteps”来旋转数组。
它涉及以下三个步骤,
- 将数组从 0 反转为 sizeOfArray-1
- 将数组从 0 反转为 shiftSteps-1
- 将数组从 shiftSteps 反转为 sizeOfArray-1
这是最终代码,
void reverseArray(int numbers[], int begin, int end)
{
while (begin < end)
{
swap(numbers[begin], numbers[end]);
begin++;
end--;
}
}
void rightRotate(int numbers[], int shiftSteps, int sizeOfArray)
{
reverseArray(numbers, 0, sizeOfArray-1);
reverseArray(numbers, 0, shiftSteps-1);
reverseArray(numbers, shiftSteps, sizeOfArray-1);
}
int main()
{
int shiftSteps;
int numbers[10];
cin >> shiftSteps;
for (int i = 0; i < 10; i++)
cin >> numbers[i];
rightRotate(numbers, shiftSteps, 10);
for (int i = 0; i < 10; i++)
cout << numbers[i] << " ";
}
Source 了解更多信息。
int main()
{
int shiftSteps, newposition;
int numbers[10], numberscopy[10];
cin >> shiftSteps;
for (int i = 0; i < 10; i++)
cin >> numbers[i];
for (int i = 0; i < 10; i++)
numberscopy[i] = numbers[i];
//----------------------------------------
for (int i = 0; i < 10; i++)
{
newposition = (i + shiftSteps) % 10;
numbers[newposition] = numberscopy[i];
}
for (int i = 0; i < 10; i++)
cout << numbers[i] << " ";
}
我写这段代码是为了用辅助数组向右旋转 10 个数字 "numberscopy",但我想在没有辅助数组的情况下重写代码,但我不知道如何。
您可以就地旋转数组,即不使用带有 std::rotate 的辅助数组,这是一种标准算法。
std::rotate(numbers, numbers + shiftSteps, numbers + 10);
在没有辅助数组的情况下,可以利用反转算法通过“shiftSteps”来旋转数组。 它涉及以下三个步骤,
- 将数组从 0 反转为 sizeOfArray-1
- 将数组从 0 反转为 shiftSteps-1
- 将数组从 shiftSteps 反转为 sizeOfArray-1
这是最终代码,
void reverseArray(int numbers[], int begin, int end)
{
while (begin < end)
{
swap(numbers[begin], numbers[end]);
begin++;
end--;
}
}
void rightRotate(int numbers[], int shiftSteps, int sizeOfArray)
{
reverseArray(numbers, 0, sizeOfArray-1);
reverseArray(numbers, 0, shiftSteps-1);
reverseArray(numbers, shiftSteps, sizeOfArray-1);
}
int main()
{
int shiftSteps;
int numbers[10];
cin >> shiftSteps;
for (int i = 0; i < 10; i++)
cin >> numbers[i];
rightRotate(numbers, shiftSteps, 10);
for (int i = 0; i < 10; i++)
cout << numbers[i] << " ";
}
Source 了解更多信息。