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

Bagaimanakah Saya Boleh Menjana Gabungan dalam C dengan Cekap?

DDD
Lepaskan: 2024-12-02 00:11:11
asal
530 orang telah melayarinya

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;
}
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan