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)
boiustef:
de unde stii ca e gresit? si daca e de pe pbinfo?
Răspunsuri la întrebare
Răspuns de
4
Răspuns:
void produs(int n, int &k)
{
int p=1, m=1;
while (p*m<=n)
{
p=p*m;
m+=2;
}
k=m-2;
}
Explicație:
Alte întrebări interesante
Engleza,
8 ani în urmă
Matematică,
8 ani în urmă
Chimie,
9 ani în urmă
Studii sociale,
9 ani în urmă
Limba română,
9 ani în urmă