fbpx

Problema #1356 – nsir – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Fie n un număr natural.

Exemplu

nsir.in

33

nsir.out

3 3 9 9 9
3 5 5 5 15

Explicație

Se observă că
1) 1 = 1/3+1/3+1/9+1/9+1/9 și 33 = 3+3+9+9+9
2) 1 = 1/3+1/5+1/5+1/5+1/15 și 33 = 3+5+5+5+15

#include <bits/stdc++.h>
using namespace std;

ifstream cin("nsir.in");
ofstream cout("nsir.out");

int n , x[41] , ok;

void afisare(int k)
{
    for(int i = 1 ; i <= k ; i++)
        cout << x[i] << " ";
    cout << '\n';
    ok++;
}

void back(int k , int sp , double sp1)
{
    for(int i = 1 ; i <= n ; i++)
    {
        x[k] = i;
        if(k == 1 || x[k] >= x[k - 1])
        {
            sp += x[k];
            sp1 += double(1.0 / x[k]);
            if(sp <= n && sp1 <= 1.00001)
                if(sp == n && sp1 + 0.00001 >= 1) afisare(k);
                else back(k + 1 , sp , sp1);
            sp -= x[k];
            sp1 -= double(1.0 / x[k]);
        }
    }
}

int main()
{
    cin >> n;
    back(1 , 0 , 0);
    if(ok == 0) cout << 0;
}
Comentarii

S-ar putea sa iti placa