Pagini recente » Cod sursa (job #567912) | Cod sursa (job #1053598) | Cod sursa (job #1315560) | Cod sursa (job #3131639) | Cod sursa (job #990970)
Cod sursa(job #990970)
#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);
}