# PBinfo #3501 – OraDeMate – Rezolvare C++

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

## Enunț

Cerința
Astăzi la ora de mate, Gigel și Ionel nu au fost atenți deloc la explicațiile domnului profesor, iar acesta a hotărât să le dea la finalul orei o tema consistentă pentru ca acest lucru să nu se mai repete. Astfel, fiecare elev a primit pe lângă tema de casă obișnuită încă un exercițiu. Acestea sună în felul următor:

Exercițiul lui Gigel : pentru o cifră n să se genereze în ordine strict crescătoare toate numerele diferite de n cifre astfel încât oricare ar fi i, 1 ≤ i ≤ n, cifra de pe poziția i și i au parități diferite (pozițiile cifrelor sunt numerotate de la stânga la dreapta și sunt indexate de la 1).

Exercițiul lui Ionel : pentru o cifră n să se genereze în ordine strict crescătoare toate numerele diferite de n cifre care au cifrele în ordine crescătoare (pot fi și cifre egale alăturate) astfel încât oricare ar fi i, 1 ≤ i ≤ n, cifra de pe poziția i și i sunt diferite (pozițiile cifrelor sunt numerotate de la stânga la dreapta și sunt indexate de la 1).

Cei doi nu au răbdare să scrie toate numerele deci vă roagă pe voi să realizați un program care le afișează pentru o valoare cunoscută a lui n.

Date de intrare
Fișierul de intrare orademate.in conține pe prima linie numerele C și n separate printr-un spațiu. Dacă C este 1, atunci se va rezolva exercițiul lui Gigel, iar dacă este 2 cel al lui Ionel.

Date de ieșire
Fișierul de ieșire orademate.out va conține pe fiecare linie a acestuia numerele obținute, în ordine strict crescătoare.

Restricții și precizări

1 ≤ n ≤ 8
1 ≤ C ≤ 2

Exemplul 1:
orademate.in

1 2
orademate.out

21
23
25
27
29
41
43
45
47
49
61
63
65
67
69
81
83
85
87
89
Explicație
C este 1, deci s-a rezolvat exercițiul lui Gigel.

Exemplul 2:
orademate.in

2 2
orademate.out

23
24
25
26
27
28
29
33
34
35
36
37
38
39
44
45
46
47
48
49
55
56
57
58
59
66
67
68
69
77
78
79
88
89
99
Explicație
C este 2, deci s-a rezolvat exercițiul lui Ionel.

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
ifstream f ("orademate.in");
ofstream g ("orademate.out");
int x[16], n, C;
void afis()
{
    for (int i = 1; i <= n; i++) g << x[i];
    g << '\n';
}
void Back1(int k)
{
    for (int i = 0; i < 10; i++)
    {
        x[k] = i;
        if ( (k > 1 || i > 0 || n == 1) && (k % 2 != i % 2))
        {
            if (k == n) afis();
            else Back1(k + 1);
        }
    }
}
void Back2(int k)
{
    for (int i = x[k - 1]; i < 10; i++)
    {
        x[k] = i;
        if ( (k > 1 || i > 0 || n == 1) && k != i)
        {
            if (k == n) afis();
            else Back2(k + 1);
        }
    }
}
int main()
{
    f >> C >> n;
    if (C == 1) Back1(1);
    else Back2(1);
    f.close();
    g.close();
    return 0;
}
```

## Resurse

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