# PBinfo #1278 – ProdusCartezian2 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Cerinţa
Se dau n mulțimi:


\( A_1 = \left\{1,2,…,v_1 \right\} \)
\( A_2 = \left\{1,2,…,v_2 \right\} \)
..
\( A_n = \left\{1,2,…,v_n \right\} \)

Să se genereze în ordine lexicografică elementele produsului cartezian \( A_1 \times A_2 \times \cdots \times A_n \).

Date de intrare
Fișierul de intrare produscartezian2.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale nenule v[1] v[2] ... v[n].

Date de ieşire
Fișierul de ieșire produscartezian2.out va conține elementele produsului cartezian, fiecare pe o linie. Valorile de pe fiecare linie vor fi separate prin câte un spațiu.

Restricţii şi precizări

1 ≤ n ≤ 7
1 ≤ v[i] ≤ 7

Exemplu:
produscartezian2.in

3
2 1 3
produscartezian2.out

1 1 1 
1 1 2 
1 1 3 
2 1 1 
2 1 2 
2 1 3

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
int n, v[10], x[10];
std :: ifstream fin("produscartezian2.in");
std :: ofstream fout("produscartezian2.out");
void afis(int k){
    for(int i=1 ; i <= k ; ++i)
        fout << x[i] << " ";
    fout << std :: endl;
}
void back(int k){
    for(int i = 1; i <= v[k] ; ++i)
    {
        x[k]=i;
        if(k == n)
            afis(k);
        else
            back(k+1);
    }
}
int main(){
	fin >> n;
    for(int i = 1 ; i <= n ; i ++)
        fin >> v[i];
	back(1);
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1278)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1278/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1278/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
