Informatică, întrebare adresată de iamsmart10, 8 ani în urmă

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.

EXEMPLU:
Dacă a=200, atunci k=7 (1⋅3⋅5⋅7 ≤ 200 <1⋅3⋅5⋅7⋅9).


Eu am gasit aceasta rezolvare care aparent e buna, insa nu inteleg ceva!!!


void produs(int a, int &k)

{

int p=1, i;

for(i=1; p<=a; i+=2)

p*=i;

k=i-4;

}


de ce acolo, la final, k=i-4. Daca ar fi fost dupa mine, eu as fi pus k=i-2, insa am incercat si nu da corect. Cine imi poate explica?

Multumesc frumos!!!


iamsmart10: Problema 2808 pe pbinfo.ro

Răspunsuri la întrebare

Răspuns de Sergetec
1

Salut!

Trebuie sa scadem cu -4, deoarece noi incepem cu i ul de la 1, iar daca ar fi sa dam niste cout uri pe exemplu ar veni astfel:

p = 1 (1 * 1 = 1), deci un pas va fi tot 1, in loc sa trecem la 3

i = 3 (1 + 2 = 3)

p = 3

i = 5

p = 15

i = 7

p = 105

i = 9 (daca ar fi fost sa ne oprim aici, atunci ar fi fost k = i - 2), insa p este in continuare <= a, asa ca mai mergem inca un pas)

p = 945 (aici p a depasit valoarea lui a, insa il crestem in continuare si pe i, iar apoi programul va verifica si va vedea ca p a depasit valoarea lui a)

i = 11

7 (k = 7)

Un fix la chestia asta ar fi sa verificam dupa instructiunea p *= i daca p a depasit a, iar daca a depasit ii dam un break fortat, pentru a nu l mai creste pe i, iar astfel rezultatul k va fi i - 2

Alte întrebări interesante