fbpx

Problema #201 – SubmDiv – Rezolvari PBInfo

de Mihai-Alexandru

Cerinţa

Să se determine toate submulţimile cu m elemente ale mulţimii divizorilor unui număr natural x dat.

Date de intrare

Fişierul de intrare submdiv.in conţine pe prima linie numerele x şi m,cu semnificaţia din enunţ.

Date de ieşire

Fişierul de ieşire submdiv.out va conţine pe fiecare linie câte o submulţime determinată. Aceste submulţimi for fi afişate în ordine lexicografică. Pentru fiecare submulţime se vor afişa elementele în ordine crescătoare, separate printr-un spaţiu.

Restricţii şi precizări

  • 1 ≤ m ≤ 6
  • 1 ≤ x ≤ 1000
  • dacă nu există soluţie, pe prima linie a fişierului submdiv.out se va afişa mesajul fara solutie

Exemplu

submdiv.in

45 4

submdiv.out

1 3 5 9 
1 3 5 15 
1 3 5 45 
1 3 9 15 
1 3 9 45 
1 3 15 45 
1 5 9 15 
1 5 9 45 
1 5 15 45 
1 9 15 45 
3 5 9 15 
3 5 9 45 
3 5 15 45 
3 9 15 45 
5 9 15 45 
#include <bits/stdc++.h>
using namespace std;

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

int n , m , x[20] , a[20] , p , cnt;

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


void back(int k)
{
    for(int i = x[k - 1] + 1 ; i <= p ; i++)///se iau de la anterior + 1
    {
        x[k] = i;
        if(k == m) afisare();///daca s au pus m
        else back(k + 1);
    }
}

int main()
{
    cin >> n >> m;
    for(int i = 1 ; i <= n ; i++)
        if(n % i == 0) a[++p] = i;
    back(1);
    if(cnt == 0) cout << "fara solutie";
    return 0;
}
Comentarii

S-ar putea sa iti placa