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
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';
}
}