Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menjana Gabungan dalam C Menggunakan Pilihatur?

Bagaimanakah Saya Boleh Menjana Gabungan dalam C Menggunakan Pilihatur?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-30 19:04:13483semak imbas

How Can I Generate Combinations in C   Using Permutations?

Menjana Gabungan dalam C menggunakan Pilihatur Mudah

Dalam C , anda boleh menjana gabungan menggunakan pendekatan mudah yang melibatkan pilih atur. Kaedah ini memerlukan pemahaman tentang konsep penjanaan pilih atur, di mana susunan unsur penting.

Garis Algoritma:

  1. Buat vektor boolean v bersaiz n, dengan n ialah jumlah bilangan elemen dalam set.
  2. Untuk elemen r pertama bagi v, tetapkannya kepada benar. Langkah ini memilih elemen r pertama daripada set.
  3. Gunakan fungsi next_permutation atau prev_permutation untuk menjana semua pilih atur vektor boolean.
  4. Untuk setiap pilih atur, cetak indeks unsur yang sepadan dengan nilai sebenar dalam v.

Pelaksanaan:

Berikut ialah pelaksanaan algoritma ini menggunakan next_permutation:

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

Penjelasan:

Fungsi atur_seterusnya menjana pilih atur leksikografik seterusnya vektor boolean. Dengan melelaran ke atas vektor dan mencetak indeks nilai sebenar, kami memperoleh gabungan elemen r pertama dalam set.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Gabungan dalam C Menggunakan Pilihatur?. 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