Second Opinion
Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale. Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit. www.neurohope.ro |
[TEMA] Ecuatii2
Last Updated: Feb 13 2016 13:49, Started by
GlontzZz
, Feb 12 2016 19:24
·
0
#1
Posted 12 February 2016 - 19:24
Problema: http://www.infoarena...oblema/ecuatii2
Cod:
Spoiler
Reusesc sa scot numai 3 teste din 10. Nu am rezultatul corect pe celelalte. Sa mai fie cazuri speciale pe care nu le-am verificat, sau am gresit la implementare? |
#2
Posted 12 February 2016 - 19:47
Nu inteleg ce scop are discriminarea stanga vs dreapta. Ai nevoie de un singur discriminant care are valoarea +1 in stanga egalului si -1 in dreapta egalului.
Initial ai doua pool-uri de valori, unul pentru cantitateX cu cantitatea de X-uri, si unul cu cantitatea numerica. La citire unui numar n, adaugi n*discriminant in pool-ul corect, cantitateX sau cantitate. Decizi care e corect in functie de caracterul de dupa numar, daca el e x, atunci n se adauga in cantitateX, altfel in cantitate. La final vei avea cantitateX si cantitate, si stii ca trebuie sa fie adevarat ca: ax=b, unde a este cantitateX, iar b este cantitate. In functie de valori, decizi daca e imposibil sau infinit, sau solutia numerica. PS: sa nu uiti sa schimbi discriminant=-1 cand citesti caracterul =. |
#3
Posted 12 February 2016 - 20:25
@OriginalCopy, incep acum sa o rezolv cum ai spus. Poate reusesc asa.
Intre timp, am reusit sa urc solutia precedenta la 70 de puncte.
Spoiler
|
#4
Posted 12 February 2016 - 20:52
OriginalCopy, on 12 februarie 2016 - 19:47, said:
... Cu ajutorul testelor si al debuggerului, am reusit sa o duc la 70 de puncte prin metoda spusa de tine. Mai departe, nu imi dau seama. #include <iostream> #include <fstream> #include <string> #include <iomanip> std::ifstream fin("ecuatii2.in"); std::ofstream fout("ecuatii2.out"); int n; std::string ecuatie; double cantitateX, cantitateNumerica; int discriminant = 1, semn = 1; void rezolva() { int aux = 0; for (int i = 0; i < ecuatie.length(); i++) { switch (ecuatie[i]) { case '-': cantitateNumerica += (aux * semn * discriminant); aux = 0; semn = -1; break; case '+': cantitateNumerica += (aux * semn * discriminant); aux = 0; semn = 1; break; case 'x': if (aux != 0) cantitateX += (aux * semn * discriminant); else if (aux == 0) cantitateX += (semn * discriminant); aux = 0; break; case '=': cantitateNumerica += (aux * semn * discriminant); aux = 0; semn = 1; discriminant = -1; break; default: aux = aux * 10 + (ecuatie[i] - '0'); break; } } if (ecuatie[ecuatie.length() - 1] != 'x') cantitateNumerica += (aux * semn * discriminant); } // ax = b // a = cantitateX // b = cantitateNumerica void afiseaza() { std::cout << cantitateNumerica << " " << cantitateX << "\n"; if (cantitateNumerica == cantitateX && cantitateNumerica == 0) fout << "infinit\n"; else if (cantitateX == 0) fout << "imposibil\n"; else if (cantitateNumerica == 0) fout << "0\n"; else fout << std::setprecision(5) << cantitateNumerica / cantitateX * -1 << "\n"; } int main() { fin >> n; std::getline(fin, ecuatie, '\n'); for (int numarEcuatii = 1; numarEcuatii <= n; numarEcuatii++) { cantitateX = 0; cantitateNumerica = 0; discriminant = 1; semn = 1; std::getline(fin, ecuatie, '\n'); rezolva(); afiseaza(); } return 0; } |
#5
Posted 12 February 2016 - 21:56
fout << std::setprecision(5) << cantitateNumerica / cantitateX * -1 << "\n"; schimbă cu fout << std::fixed << std::setprecision(5) << cantitateNumerica / cantitateX * -1 << "\n"; |
#6
Posted 12 February 2016 - 22:05
Multumesc frumos, sftpdt. Am luat 100. Ce diferenta face acel std::fixed? Nu se ocupa deja std::setprecision() de precizia de dupa virgula?
|
#7
Posted 12 February 2016 - 22:10
#8
Posted 12 February 2016 - 22:12
Ah, ok. Am inteles . Multumesc frumos pentru ajutor amandurora. Raman dator!
|
#9
Posted 13 February 2016 - 07:27
GlontzZz, on 12 februarie 2016 - 22:05, said:
Multumesc frumos, sftpdt. Am luat 100. Ce diferenta face acel std::fixed? Nu se ocupa deja std::setprecision() de precizia de dupa virgula? sftpdt, on 12 februarie 2016 - 22:10, said:
Ba da, dar dacă numărul are mai puține zecimale decât vrei tu să afișezi, std::fixed completează cu 0 la final (sau cam așa ceva, nu le am cu explicațiile ). cout << setprecision(5) << 15.0 / 2 << endl; cout << setprecision(5) << 15.0 / 4 << endl; cout << setprecision(5) << 15.0 / 8 << endl; cout << fixed << setprecision(5) << 15.0 / 2 << endl; cout << fixed << setprecision(5) << 15.0 / 4 << endl; cout << fixed << setprecision(5) << 15.0 / 8 << endl; Quote 7.5 3.75 1.875 7.50000 3.75000 1.87500 |
#10
Posted 13 February 2016 - 13:49
MarianG, on 13 februarie 2016 - 07:27, said:
ai asteptat 5 minute un raspuns pe care il puteai gasi in doua http://www.cplusplus...p/setprecision/ |
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users