Cod sursa(job #3160560)

Utilizator apoputoaievladVlad Cristian Apoputoaie apoputoaievlad Data 24 octombrie 2023 17:03:27
Problema Generare de permutari Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.89 kb
#include <bits/stdc++.h>
using namespace std;

int main()
{
    /**
    1. Citim n natural si afisam toate sirurile de n biti.
    ex: n = 3
    000 = 0
    001 = 1
    010 = 2
    011 = 3
    100 = 4
    101 = 5
    110 = 6
    111 = 7

    int n, N, i, j;
    cin >> n;
    N = (1 << n);
    for (i = 0; i < N; i++)
    {
        /// reprezentam pe i in baza 2 pe n biti
        for (j = n - 1; j >= 0; j--)
            cout << ((i >> j) & 1);
        cout << "\n";
    }
    -------------------------------------------------
    2. Citim n natural. Sa afisam toate submultimile
      multimii {1,2,...,n}
      ex: n=3
      {} {1} {2} {3} {1,2} {1,3} {2,3} {1,2,3}

    int n, N, i, j;
    cin >> n;
    N = (1 << n);
    for (i = 0; i < N; i++)
    {
        /// reprezentam pe i in baza 2 pe n biti
        for (j = 0; j < n; j++)
            if ((i >> j) & 1) cout << (j + 1) << " ";
        cout << "\n";
    }
    --------------------
    Rezolvare 2:
        1 2 3
    a = 0 0 1 => {3}
        0 1 0 => {2}
        0 1 1 => {2,3}
        ...
        1 1 1 => {1,2,3}

    int n, i, a[25] = {0};
    cin >> n;
    a[n] = 1;
    while (a[0] == 0)
    {
        /// afisare submultime
        for (i = 1; i <= n; i++)
            if (a[i] == 1) cout << i << " ";
        cout << "\n";
        /// trecem la urmatoarea submultime:
        for (i = n; a[i] == 1; i--)
            a[i] = 0;
        a[i]++;
    }
    -----------------------------------------------
    3. Generam permutarile multimii {1,2,...,n}
    */
    ifstream fin("permutari.in");
    ofstream fout("permutari.out")
    int n, i;
    fin >> n;
    vector<int> a(n);
    for (i = 1; i <= n; i++)
        a[i - 1] = i;
    do
    {
        for (int e : a)
            fout << e << " ";
        fout << "\n";
    }
    while(next_permutation(a.begin(), a.end()));
    return 0;
}