Daripada menggunakan metode biner, dapatkah Anda menggunakan program C++ dasar untuk menyelesaikan masalah?

pemrograman


Tulis program dalam c++. Kolom keluaran terakhir tidak terbungkus. Memungkinkan pengguna memasukkan 15 bilangan bulat (termasuk bilangan bulat positif dan negatif) melalui keyboard. Program mengurutkan nomor masukan (dari kecil ke besar) dan mencetak hasilnya. Namun aturan pengurutannya sedikit disesuaikan sebagai berikut: (1) Semua bilangan genap harus diurutkan terlebih dahulu sebelum semua bilangan ganjil (2) Semua bilangan genap dan semua bilangan ganjil diurutkan dari kecil ke besar (3) Jika masukannya berisi 0, 0 akan diurutkan terakhir. Angka bukan nol di depan dan sesudahnya diurutkan menurut aturan di atas. Misal bilangan masukannya berurutan: 51 -4 0 24 -13 -6 0 38 -27 -48 3 17 8 0 21. Maka hasil pengurutannya adalah: 0 0 0 -48 -6 -4 8 24 38 – 27 -13 3 17 21 51 Untuk bagian yang memerlukan masukan pengguna, harap cetak perintah pesan teks sebelum mengizinkan pengguna untuk memasukkan. Layar keluaran eksekusi program adalah sebagai berikut ( artinya kosong) Integer1:51 Integer2:-4 Integer3:0 Integer4:24 Integer5:-13 Integer6:-6 Integer7:0 Integer8:38 Integer9:-27 Integer10:-48 Integer11: 3 Integer12: 17 Integer13:8 Integer14:0 Integer15:21 Hasil: 0□0□0□-48□-6□-4□8□24□38□-27□-13□3□17□21□51

Apa yang saya coba:

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

Solusi 1

Jika Anda hanya menggunakan pengurutan gelembung sederhana pada nilai masukan terlebih dahulu, maka Anda akan mendapatkan semua angka secara berurutan. Jadi dalam sampel Anda, daftar yang diurutkan adalah:

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

Jadi dari daftar itu mudah untuk dipecah menjadi dua daftar baru. Satu berisi semua bilangan genap, dengan angka nol di akhir, dan satu berisi semua bilangan ganjil.

Alternatifnya, Anda bisa menggunakan aturan dalam rutinitas pengurutan Anda untuk melakukan apa yang tertulis dalam pertanyaan.

コメント

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