Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menjana Gabungan dalam C dengan Cekap?

Bagaimanakah Saya Boleh Menjana Gabungan dalam C dengan Cekap?

DDD
DDDasal
2024-12-02 00:11:11532semak imbas

How Can I Efficiently Generate Combinations in C  ?

Menjana Gabungan dengan Cekap dalam C

Menentukan gabungan dalam C boleh menjadi tugas yang mencabar, terutamanya jika anda sedang mencari penyelesaian fleksibel yang mengendalikan nilai input yang berbeza-beza.

Pendekatan yang bernas untuk masalah ini melibatkan penggunaan fungsi pilih_sudah daripada perpustakaan C standard. Fungsi ini menjana semua pilih atur vektor secara berperingkat. Begini cara anda boleh menggunakan fungsi ini:

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    int n, r;
    std::cin >> n;
    std::cin >> r;

    std::vector<bool> v(n);
    std::fill(v.end() - r, v.end(), true);

    do {
        for (int i = 0; i < n; ++i) {
            if (v[i]) {
                std::cout << (i + 1) << " ";
            }
        }
        std::cout << "\n";
    } while (std::next_permutation(v.begin(), v.end()));
    return 0;
}

Pendekatan ini berkesan mencipta tatasusunan pemilihan (v) dengan nilai pemilih r. Selepas itu, ia berulang melalui semua pilih atur tatasusunan pemilihan ini, mencetak ahli set yang sepadan untuk kedudukan yang dipilih.

Sebagai contoh, jika anda memberikan input "5 2" (S = {1, 2, 3, 4 , 5} dan r = 2), algoritma ini akan mengeluarkan:

1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

Kaedah ini menyediakan penyelesaian yang cekap dan umum untuk menghasilkan kombinasi dalam C .

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Gabungan dalam C dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn