👤

Salut! Imi puteti spune unde am gresit la urmatoarea problema: Subprogramul produs are doi parametri, în această ordine:

a, prin care primește un număr natural (a∈[1,106]);
k, prin care furnizează cea mai mare valoare naturală impară cu proprietatea că produsul tuturor numerelor impare din intervalul [1,k] este mai mic sau egal cu a.
Scrieți definiția completă a subprogramului.

Metoda mea:

#include

using namespace std;

int produs(int a,int &k)
{int ok=0,i,p=1,j,k=1;
do{
for(i=1;i<=k;i++)
if(i%2!=0)
p=p*i;
j=k;
k=p;
if(p>a)
{ok=1; k=j-2;}
else
k=j+2;

}while(ok==0);
return k;
}
explicatie: pentru fiecare i=1 pana la k daca i impar atunci p=p*i in final dupa executarea "for-ului" p-ul va lua valoare produsului primelor k numere impare unde k este initializat 1
------------
copiez valoarea lui k in j (j=k;)
k ia valoarea produsului (k=p;)
compar : daca p depaseste pe a atunci inseamna ca numarul k care respecta cerintele problemei va fi cu 2 unitati in urma k=valoarea salvata (j) - 2 OK=1 adica m-am oprit
else : valoarea lui k redevine valoarea salvat + 2 unitati (k merge din impar in impar in ordine crescatoare)