不使用二进制方法,可以使用基本的C++程序来解决这个问题吗?


用 C++ 编写一个程序。 输出的最后一列不换行。 允许用户通过键盘输入15个整数(包括正整数和负整数)。 该程序对输入数字进行排序(从小到大)并打印结果。 但排序规则略有调整如下: (1) 所有偶数必须排在所有奇数之前 (2) 所有偶数和所有奇数从小到大排序 (3) 如果输入包含 0, 0将排在最后 前面和后面的非零数字按照前面提到的规则进行排序。 例如,输入的数字顺序为:51 -4 0 24 -13 -6 0 38 -27 -48 3 17 8 0 21,则排序结果为:0 0 0 -48 -6 -4 8 24 38 – 27 -13 3 17 21 51 对于需要用户输入的部分,请打印出短信提示后才允许用户输入。 程序执行输出画面如下(0 表示空白) Integer1:51 Integer2:-4 Integer3:0 Integer4:24 Integer5:-13 Integer6:-6 Integer7:0 Integer8:38 Integer9:-27 Integer10:-48 Integer11: 3 整数12: 17 整数13:8 整数14:0 整数15:21 结果:0□0□0□-48□-6□-4□8□24□38□-27□-13□3□17□21□51

我尝试过的:

C++
#include <iostream>
using namespace std;

void sortArray(int arr[], int n) {
    int temp;
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
            if (arr[i] > arr[j]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

int main() {
    int nums[15];
    int sortedNums[15];
    int n = 0;

 
    for (int i = 0; i < 15; ++i) {
        cout << "Integer" << i + 1 << ": ";
        cin >> nums[i];
    }

    for (int i = 0; i < 15; ++i) {
        if (nums[i] == 0) {
            sortedNums[n++] = nums[i];
        }
    }

    for (int i = 0; i < 15; ++i) {
        if (nums[i] != 0 && nums[i] % 2 == 0) {
            sortedNums[n++] = nums[i];
        }
    }


    for (int i = 0; i < 15; ++i) {
        if (nums[i] % 2 != 0) {
            sortedNums[n++] = nums[i];
        }
    }

    // ?整?排序???行排序
    sortArray(sortedNums, n);

    // ?出?果
    cout << "Result: ";
    for (int i = 0; i < n; i++) {
        cout << sortedNums[i] << " ";
    }

    return 0;
}

解决方案1

如果您首先对输入值使用简单的冒泡排序,那么您将获得按顺序排列的所有数字。 因此,在您的示例中,排序列表是:

0 0 0 -48 -6 -4 8 24 38 -27 -13 3 17 21 51

因此,从该列表中分割成两个新列表是一件简单的事情。 一种包含所有偶数,末尾有零,另一种包含所有奇数。

或者,您可以使用排序例程中的规则来执行问题所述的操作。

コメント

タイトルとURLをコピーしました