infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Pavel Andrei din Decembrie 04, 2013, 22:05:15



Titlul: Triunghiul numerelor,sa se afle pozitia numarului citit.
Scris de: Pavel Andrei din Decembrie 04, 2013, 22:05:15
Salutare! Am un triunghi al numerelor.

           1               Linia 1
         2  3             Linia 2
       4  5  6           Linia 3
     7 8  9  10 (si asa pana la infinit)    Linia 4 ,spre infinit.

Trebuie sa creez un program in c++ care sa imi afiseze pe ce linie se afla numarul citit...Am incercat si tot am incercat dar nu mi-a reusit nimic.

Daca puteti sa imi explicati si sa imi dati si rezolvarea ar fi perfect,sau doar rezolvarea.

Multumesc mult!


Titlul: Răspuns: Triunghiul numerelor,sa se afle pozitia numarului citit.
Scris de: Prehari Romica din Decembrie 05, 2013, 12:23:59
Salut,

Daca observi ultimul numar de pe fiecare linie n e suma de la 1 pana la n, suma se poate afla asa s=n(n+1)/2. Sa zicem ca x este numarul citit deci el se afla pe linia n daca n(n+1)/2=x adica n(n+1)-2x=0. Din aceasta ecuatie necunoscuta este n deci o sa ai doua solutii n1=(sqrt(1+8x)-1)/2 si n2=(-sqrt(1+8x)-1)/2, a doua este negativa deci nu este buna. n trebuie sa fie intreg deci scrii n=(int)(sqrt(1+8x)-1)/2.
Rotunjirea se face la n-1 deci mai trebuie sa adaugi 1 la n, adica n=(int)(sqrt(1+8x)-1)/2+1. Mai este o problema cand radicalul poate fi numar intreg deci nu se mai face rotunjirea la n-1, ca sa rezolvi si asta verifici daca (int)sqrt(1+8*n)==sqrt(1+8*n) si daca e adevarata scazi 1 din n. Mai ramane sa afisezi n.

Sper ca ai inteles. Codul il scrii si tu ca nu e mult.


Titlul: Răspuns: Triunghiul numerelor,sa se afle pozitia numarului citit.
Scris de: Pavel Andrei din Decembrie 05, 2013, 22:42:08
Pai asta e...nu stiu cum sa le transcriu in cod,ca formulele le-am gasit si eu inainte de asta,multumesc totusi.

Poti sa imi scrii astea si in cod? Multumesc anticipat.