Cod sursa(job #990970)

Utilizator yololy97Olaru Bogdan-Ioan yololy97 Data 29 august 2013 13:01:06
Problema Submultimi Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include <cstdio>

int x[20], n;

// genereaza cu back toate sirurile binare
//adica sa generez sirurile binare? daca n = 3 trebuie sa generezi
// 000
// 001ok
// sirul binar 010110 inseamna submultimea {2, 4, 5} ok
void afis() {
    // afiseaza submultimea, x[i] = 1 => afisezi i
    // vezi sa nu afisezi si multimea vida!!!!
    //verifica aici daca ai vreun 1
    int i;
    int one_count = 0;
    for (i = 1; i <= n; ++i)
        if (x[i])
            ++one_count;
    if (one_count == 0)// aici sar peste multimea vida
    // daca scoti if-ul asta o sa-ti afiseze o linie goala
        return;//abia acum am inteles mie imi lasa un printf '\n' :))da
    for(i = 1;i <= n; ++i)//pai si daca il am in submultime inseamna ca e vid NU, vid = sirul 000000...0
        if(x[i])printf("%d ",i);//afisez un numar de la 1 la n  ce dumnezeu ? pai daca x[i] = 1 inseamna ca ai pe i in submultime da si de aia il afisezi?
    printf("\n");
}
void back(int k){
    if(k == n + 1)
        afis();
    else {
        // ce valori poti pune pe x[k] ?
        // 0 1

        for (int i = 0; i <= 1; ++i)
            x[k] = i,
            back(k + 1);
        // sau poti pune x[k] = 0; back(k + 1); x[k] = 1; back(k + 1);
        //prefer varianta mai scurta :D
        // nu cred ca e vreuna mai scurta...
        //ok

    }
}
//cum afisez multimea vida? pai asta zic ca NU TREBUIE SA O AFISEZI pai da dar eu unde o afisez?
int main(){
    freopen("submultimi.in","r",stdin);
    freopen("submultimi.out","w",stdout);
    scanf("%d ",&n);
    back(1);
}