C
Sa se afiseze toate descompunerile unui numar s ca suma de n elemente distincte- aceasta este o varianta a problemei dinainte; puteti sesizati unde apare diferenta in rezolvare? #include <stdio.h> int a[10],s,n,contor=0; void descompune(int s,int k) else for(i=a[n-k]+1;i<s;i++) void main(void) Probleme cu solutie surprinzatoareIn rezolvarea fiecareia din problemele urmatoare este foarte usor de cazut in capcana solutionarii de genul la prima mina' sau brute-force-approach in limba engleza (abordare in forta bruta . Este cea mai des intilnita capcana pentru programatorii lipsiti de subtilitate, experienta sau cultura de specialitate. Este si aceasta o rezolvare, desigur, dar lipsa ei de eficienta si de eleganta este evidenta. Tocmai de aceea, consideram foarte utila prezentarea citorva exemple elocvente, impreuna cu solutiile lor. Unele dintre probleme au fost selectionate dintre problemele date la concursurile si olimpiadele scolare de programare . Prin acest capitol nu urmarim doar insusirea unor cunostinte practice de programare ci, mai ales, aprofundarea capacitatii de analiza si proiectare a solutiilor. Aceasta presupune un salt calitativ in invatarea programarii si de aceea acest capitol devine cu adevarat util numai pentru acei programatori inteligenti si dornici de auto-perfectionare. Sau pentru cei care se pregatesc pentru participarea la concursurile si olimpiadele de informatica. Solutiile oferite de noi
sint, pentru fiecare problema, eficiente si ' Putem atunci spune, ca motto-ul acestui capitol este: 'Nu te multumi niciodata cu solutia la prima mina !'. Sa se afiseze numarul cuburilor perfecte mai mici decit n. Analiza problemei - elaborarea algoritmului: Capcana problemei consta in tentativa de a parcurge printr-un ciclu for toate numerele de la 1 la n si de a contoriza cele care sint cuburi perfecte. La o a noua privire, mai atenta, observam ca partea intreaga a radicalului de ordinul 3 din n ne ofera acel numar care ridicat la a 3-a este cel mai apropiat cub de n. Deci, partea intreagp a radicalului de ordinul 3 din n este egala chiar cu numarul cuburilor mai mici decit n. (Este suficient sa calculam radical de ordinul 3 din n pentru a afla cite cuburi mai mici decit n exista.) program cuburi_perfecte; var n,i,nr_cub:word; BEGIN write('n=');readln(n); nr_cub:=trunc(exp(1/3*ln(n))); writeln('numarul cuburilor perfecte < ',n,' este = ', nr_cub); readln; END.
|