-
Posts
158 -
Joined
-
Last visited
-
Days Won
3
Content Type
Profiles
Forums
Events
Everything posted by hiey19
-
Sau puteai sa folosesti o variabila ok si sa mergi de la 2 la sqrt(a).
-
Problema C++ Numere Perfecte Mai Mici Decat O Valoare Data
hiey19 replied to Courage's topic in C / C++ / C#
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. -
Oh... am crezut ca vrea de la dreapta. Acum am recitit indicatia si scrie ca numaratoarea se face de la cifra cea mai semnificativa.
-
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; }
-
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.
-
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.
-
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.
-
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.
-
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)
-
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;
-
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.
-
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.
-
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.
-
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)
-
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.
-
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.
-
@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.
-
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.
-
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.
-
Daca aceste tipuri de emailuri ar fi adevarate atunci as fi si eu milionar in euro.
-
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.
-
Now you see me -http://www.imdb.com/title/tt1670345/ Un film pe gustul meu.Il recomand.