Informatică, întrebare adresată de DavidAA007, 9 ani în urmă

Scrieti un program care descompune numarul natural n<51 in suma de numere naturale n=n(indice)1+n(indice)2+...+n(indice)k, astfel incat produsul lor p=n(indice)1*n(indice)2*...*n(indice)k sa fie maxim.
In caz ca nu ati inteles ce trebuie sa afisati:
Afisati p.
DAU COROANAAA!

Răspunsuri la întrebare

Răspuns de GeneralRex121
2

Comenturile afiseaza si suma de numere, daca iti trebuie, poti sa folosesti un formatter sau beautifier pentru a intelege textul mai clar

#include <iostream>

#include <vector>


using namespace std;


int fact(int n){

if(n == 0 || n == 1){

return 1;

} else {

return fact(n-1) * n;

}

}


int s_g(int n){

int s = 0;

for(int i = 1; i<=n;++i){

s += i;

}


return s;

}


int main()

{

int n;

cin >> n;


int s = 0;

vector<int> sn;

int prod = 1;


int fac;

bool b_fac = false;


for(int i = 1; i<=n;++i){

if(s_g(i) == n){

b_fac = true;

fac = i;

}

}


int last = 0;

int rl;


if(b_fac == true){

//for(int i = 1; i<=fac;++i){

//cout << i;

//if(i < fac){

//cout << " + ";

//}

//}


//cout << '\n';


prod = fact(fac);

cout << prod << '\n';

} else {

for(int i = 1; i<=n;++i){

if(s < n){

s += i;

sn.push_back(i);

}

}

last = sn[sn.size() - 1];

sn.pop_back();

rl = last - (s - n);

sn.push_back(rl);


prod = 1;


//for(int i = 0;i<sn.size();++i){

//cout << sn[i];

//if(i < sn.size() - 1){

//cout << " + ";

//}

//}


//cout << '\n';


for(int i = 0;i<sn.size();++i){

prod *= sn[i];

}


cout << prod << '\n';

}


}


Alte întrebări interesante