Jump to content

hiey19

Members
  • Posts

    158
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by hiey19

  1. Sau puteai sa folosesti o variabila ok si sa mergi de la 2 la sqrt(a).
  2. Cel de-al 2-lea for (cel cu j) pune-l sa mearga pana la <=i/2. La tine nu va merge la 12 in cazul numarului 24.(24/2=12 iar la tine e <i/2 deci merge pana la 11). Mai scoate si acea verificare( if(i==S) ) din if-ul cu calcularea sumei. In cel de-al dolea for calculezi suma si dupa verifici daca suma este egala cu i.
  3. La multi ani !
  4. Oh... am crezut ca vrea de la dreapta. Acum am recitit indicatia si scrie ca numaratoarea se face de la cifra cea mai semnificativa.
  5. Cam asa ceva ar trebui sa fie cu while+contor. int n,c,cf,s,p=1; int main() { cout<<"n=";cin>>n; while(n!=0) { c++; if(c%2==0) { cf=n%10; s=s+cf; p=p*cf; } n=n/10; } cout<<s<<" "<<p; return 0; }
  6. Nu e vorba ca ar fi el lung in sine. Oricine il poate face intr-un timp foarte scurt.Idea e sa nu treci prin atat de multe etape doar ca sa rezolvi o problema simpla.
  7. E prea mult de lucru ca sa-i calculezi si numarul de cifre. Incearca cu un while si cu contor sau incearca cu acele impartiri ca sa scoti cifrele de pe pozitiile pare.
  8. Nu ai facut bine pentru ca ai facut un for de la 1 la 6. Nu merge asa, iti trebuie un while. Daca tu dai un numar de trei cifre, instructiunea ta va continua, numarul tau devine 0 si va inmultii produsul tau cu 0 la al patrulea pas din for spre exemplu.
  9. Da, poti folosi un fel de contor cum a zis si GodsOtherHand. Mai ai si varianta urmatoare. Poti sa faci ceva de genul : c= (n%100)/10; c sa fie cifra pe care vrei sa o extragi. n e numarul tau. cu %100 vei lua ultimele doua cifre ,iar cu /10 vei ramane numai cu cifra de pe pozitia para. s=s+c; p=p*c; n=n/100; Va trebui sa le pui toate intr-un while. Nu stiu cat de bine ar merge, e doar o idee.
  10. Da , cam asa ceva. E mai usor sa faci in felul asta pentru ca nu mai ai de facut si inversul dupa while.In plus ai mai putine structuri repetitive care iarasi e un avantaj.(bine... nu te deranjeaza mult la programe mici)
  11. Ca sa ii faci inversul iarasi trebuie sa scrii algoritmul.Mai bine faci diferit. In loc sa scrii partea cu : rezultat = (rezultat * 10 ) + cifra , faci ceva de genul: initializezi o variabila p cu 1 rezultatul = c * p + rezultatul ; p=p*10;
  12. Ar putea fi mai ok pentru ca verifici mai putine cazuri decat cu un for(cel de la 2 la jumatatea nr.) ,dar nu-si are rostul.E prea lung pentru un lucru atat de mic. Si nu prea e elagant cu break.
  13. Incearca sa pui ifstream si ofstream dupa using namespace std. Nu ai nevoie de f.close() si de g.close(); . "şi după ce trebuie să fac ca să verific codul?" Idea e ca tu ai un fisier .in ,iar programul tau creaza fisierul .out cu rezultatul potrivit.Daca nu ai erori in program si programul iti creaza fisierul.out in care ai rezultatul bun atunci e ok.(desigur trebuie sa-ti dea rezultatul bun pe toate cazurile ) Ca sa te verifici incearca sa pui cat mai multe cazuri (spre exemplu pune cu numere mai mari ... sau chestii de genu ca sa nu ai exact acelas tip de exemple) , iar dupa acea te verifici sa vezi daca iti da bine in .out . Daca ai un algoritm si o lista cu pasi in algoritm poti sa faci cu breakpoints si sa vezi cum programul iti urmeaza fiecare pas.(treaba asta o poti face mai ales cand nu ai erori ,dar nu primesti rezultatul bun in .out , te ajuta sa-ti dai seama un ai gresit) Poti sa faci si cum a zis Lus. Asa vezi si diferenta dintre a lucra si a nu lucra cu fisiere.
  14. Totusi,trebuie sa invete sa lucreze eficient. Spre exemplu la olimpiada ai o marja de timp in care sa se incadreze programul , poti sa-l faci tu super ok ,dar daca nu e optimizat si nu lucreaza la acel nivel nu primesti nimic.(bine... am vazut ca in ultimul timp intervalul de timp nu cauzeaza probleme) Sa ramanem la chestia esentiala : daca intelegi programul si stii cum sa-l optimizezi usor , optimizeaza-l.
  15. Toata lumea prefera o viteza mai buna. Daca e usor sa-l optimizezi de ce sa nu o faci ? Ce rost are sa pui calculatorul sa faca o treaba inutila? Da e adevarat ce zici tu insa se aplica la o alta forma de optimizare.(acolo unde trebuie sa-ti schimbi modul de abordare doar ca sa-l faci mai optim ,iar impactul nu e mare)
  16. Ai folosit x ca si un OK.Nu mai ai nevoie de s atunci. O sa vezi mai tarziu cat de important e sa optimizezi un program.E bine sa te inveti cat mai repede.
  17. Nu e optimizat asa.Tu faci toate cazurile dintre n/2 si n aiurea+1 care stii deja ca e divizor. Daca ai un numar foarte mare atunci risipa e si mai mare. De acea ziceam sa faci intre 2 si n/2 si atunci if(s>0) => nr nu e prim.
  18. @Courage: Vezi ca e gresit la primul algoritm.In for mergi de la 1 la jumatatea numarului.Un nr prim ii are ca si divizori doar pe unu si pe el insusi.Daca tu verifici de la 1 la n/2 si s ajunge la 2 atunci tu vei avea 3 divizori nu 2.(cei 2 gasiti+numarul care nu intra in for pentru ca mergi pana la jumatate).Mai usor e sa initializezi suma cu 0.In for mergi de la 2 la jumatatea numarului.(tu stii ca 1 si n sunt deja divizori si nu vei gasi un divizor mai mare decat jumatatea numarului)Daca tu gasesti un divizor intre 2 si jumateatea numarului atunci nu mai e prim.(if(s==0) atunci nr prim else nu e prim) Poti sa lasi si asa insa initializezi s cu 1.(pt n insusi) Numai forul il va verifica inutil pe 1 care stii ca e deja divizor.
  19. Nu prea inteleg ce e cu acel if.(ce-i drept , mintea mea nu mai lucreaza la cote bune la ora asta) O chestie gresita pe care o vad : initializezi suma si produsul in if-ul din for. Ar fi mai usor daca ai face un subprogram care sa verifice daca un nr este prim , faci un for de la 2 la jumatatea numarului , verifici daca i este nr prim , daca da : s=s+i , p=p*i.
  20. Incearca sa faci un subprogram care sa verifice daca cele doua numere sunt prime. Ca sa-l optimizezi putin , atunci cand verifici daca e prim sau nu mergi de la 2 la jumatatea numarului(in for).Atunci cand incepi cele 2 for-uri ,incepe de la 2.
  21. Daca aceste tipuri de emailuri ar fi adevarate atunci as fi si eu milionar in euro.
  22. Acesta e ritmul din zilele noastre.Concurenta e mare deci mereu trebuie sa aduci ceva nou,atractiv. Stai linistit, orice lucru atinge un apogeu ,iar dupa acea vine declinul.
  23. Now you see me -http://www.imdb.com/title/tt1670345/ Un film pe gustul meu.Il recomand.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.