Thay vì sử dụng phương pháp nhị phân, bạn có thể sử dụng các chương trình C++ cơ bản để giải quyết vấn đề không?

lập trình


Viết chương trình bằng c++. Cột đầu ra cuối cùng không được bao bọc. Cho phép người dùng nhập 15 số nguyên (bao gồm cả số nguyên dương và số nguyên âm) thông qua bàn phím. Chương trình sắp xếp các số đầu vào (từ nhỏ đến lớn) và in kết quả. Tuy nhiên, quy tắc sắp xếp được điều chỉnh một chút như sau: (1) Tất cả các số chẵn phải được sắp xếp trước tất cả các số lẻ (2) Tất cả các số chẵn và tất cả các số lẻ đều được sắp xếp từ nhỏ đến lớn (3) Nếu đầu vào chứa 0, 0 sẽ được sắp xếp cuối cùng. Các số khác 0 ở phía trước và sau được sắp xếp theo quy tắc nêu trên. Ví dụ: các số đầu vào theo thứ tự: 51 -4 0 24 -13 -6 0 38 -27 -48 3 17 8 0 21. Khi đó kết quả được sắp xếp là: 0 0 0 -48 -6 -4 8 24 38 – 27 -13 3 17 21 51 Đối với những phần yêu cầu người dùng nhập, vui lòng in lời nhắc tin nhắn văn bản trước khi cho phép người dùng nhập. Màn hình đầu ra thực thi chương trình như sau ( có nghĩa là trống) Integer1:51 Integer2:-4 Integer3:0 Integer4:24 Integer5:-13 Integer6:-6 Integer7:0 Integer8:38 Integer9:-27 Integer10:-48 Integer11: 3 Số nguyên12: 17 Số nguyên13:8 Số nguyên14:0 Số nguyên15:21 Kết quả: 0□0□0□-48□-6□-4□8□24□38□-27□-13□3□17□21□51

Những gì tôi đã thử:

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;
}

Giải pháp 1

Nếu trước tiên bạn chỉ sử dụng tính năng sắp xếp nổi bong bóng đơn giản cho các giá trị đầu vào thì bạn sẽ có tất cả các số theo thứ tự. Vì vậy, trong mẫu của bạn danh sách được sắp xếp là:

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

Vì vậy, từ danh sách đó, việc chia thành hai danh sách mới là một vấn đề đơn giản. Một chứa tất cả các số chẵn, có số 0 ở cuối và một chứa tất cả các số lẻ.

Ngoài ra, bạn có thể sử dụng các quy tắc trong quy trình sắp xếp của mình để thực hiện những gì câu hỏi yêu cầu.

コメント

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