[TEMA]Cel mai mare divizor comun a n numere.
Last Updated: Feb 14 2016 12:46, Started by
mojonono
, Feb 10 2016 17:03
·
0
#1
Posted 10 February 2016 - 17:03
Se citesc de la tastaturã n numere întregi. Sã se afiºeze, pentru fiecare, cel mai mare divizor comun dintre ele ºi inversul lor.
#include <iostream> using namespace std; int main() { int n,invers=0,x,r,; cout<<"n= "; cin>>n; for(int i=1;i<=n;i++) { cout<<"x="; cin>>x; } while (x!=0) { invers=invers*10+x%10; x=x/10; } while(invers!=0) { r=x%invers; x=invers; invers=r; } cout<<"cmmdc este: "<<x; return 0; } Edited by mojonono, 10 February 2016 - 17:17. |
#2
Posted 10 February 2016 - 17:08
Aşa, unde e buba?
L.E. Pune codul calumea în tagul [ CODE ] şi indentează-l.
Spoiler
for(int i=1; i<=n; i++) { cout << "x="; cin >> x; } Aici citeşti n numere şi în final reţii doar ultimul citit. while(invers!=0) { r=x%invers; x=invers; invers=r; } Aici x are valoarea 0. Edited by sftpdt, 10 February 2016 - 17:11. |
#3
Posted 10 February 2016 - 17:14
Dupa primul while x-ul devine 0. Foloseste alta variabila in al doilea while care sa fie egala cu x-ul tau initial.
Edited by aLexCM, 10 February 2016 - 17:14. |
#4
Posted 10 February 2016 - 17:18
Si unde e vectorul care inmagazineaza valorile introduce de la tastatura? Apoi, pentru fiecare valoare a vectorului trebuie sa gasesti cmmdc si sa-l afisezi. Asadar ai nevoie de o parcurgere a vectorului (care se face intr-o bucla for).
Asa cum e acum, doar ultima valoare este luata in calcul (ca se rescrie peste celelalte introduce anterior). |
#5
Posted 10 February 2016 - 17:21
aLexCM, on 10 februarie 2016 - 17:14, said:
Dupa primul while x-ul devine 0. Foloseste alta variabila in al doilea while care sa fie egala cu x-ul tau initial. Am incercat asa #include <iostream> using namespace std; int main() {int n,invers=0,x,r,y; cout<<"n= "; cin>>n; for(int i=1;i<=n;i++) { cout<<"x="; cin>>x; } while (x!=0) { invers=invers*10+x%10; x=x/10; } y=x; while(invers!=0) { r=y%invers; y=invers; invers=r; } cout<<"cmmdc este: "<<y; return 0; } |
#6
Posted 10 February 2016 - 17:25
Pune-l inainte de primul while. Problema e ca tu ai un singur numar acolo. Foloseste un vector.
|
#7
Posted 10 February 2016 - 17:44
aLexCM, on 10 februarie 2016 - 17:25, said:
Pune-l inainte de primul while. Problema e ca tu ai un singur numar acolo. Foloseste un vector. Stiu ca nu e corect,dar nu stiu cum sa afisez la final,si nici cum sa fac cmmdc pentru fiecare numar. #include <iostream> using namespace std; int main() { int n,i,a[20],invers,r; cout<<"n="; cin>>n; for(i=1;i<=n;i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } while (a[i]!=0) { invers=invers*10+a[i]%10; a[i]=a[i]/10; } while(invers>0) { r=a[i]%invers; a[i]=invers; invers=r; } for(i=0;i<n;i++) cout<<"Cmmdc este"<<a[i]; return 0; } |
#8
Posted 10 February 2016 - 17:51
Trebuie sa parcurgi vectorul de fiecare data cand vrei sa lucrezi cu elementele acestuia.
|
#9
Posted 10 February 2016 - 17:59
jegmihai, on 10 februarie 2016 - 17:51, said:
Trebuie sa parcurgi vectorul de fiecare data cand vrei sa lucrezi cu elementele acestuia. Ok,si de exemplu,daca vreau sa calculez inversul a n numere,cum trebuie sa afisez la final? Am incercat asa dar imi afiseaza inversul ca fiind 0. #include <iostream> using namespace std; int main() { int n,i,a[20],invers,r; cout<<"n=";cin>>n; for(i=1;i<=n;i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } for(i=0;i<n;i++) while (a[i]!=0) { invers=invers*10+a[i]%10; a[i]=a[i]/10; } for(i=0;i<n;i++) cout<<"Inversul este "<<a[i]; return 0; } |
#10
Posted 10 February 2016 - 18:04
Iti afiseaza 0 deoarece tu acolo afisezi numerele din vector, numere care iau valoarea 0 dupa ce trec prin while-ul ala.
Parcurge vectorul. Copiaza fiecare element din vector intr-o alta variabila, invers-ului ii dai valoarea zero si-l bagi la inceputul parcurgerii si apoi pui cele doua while-uri ale tale. La final afisezi cmmdc. |
|
#11
Posted 10 February 2016 - 18:09
Cand citesti vectorul de ce pleci de la 1 si cand il parcurgi pleci de la 0 ?
Uite, asa s-ar face problema ta pentru 2 numere. Incearca sa o faci cu vector acum : #include <iostream> using namespace std; int cmmdc(int a, int { int b1=b,a1=a; while(a1!=b1) if(a1>b1) a1=a1-b1; else b1=b1-a1; return a1; } int invers(int a) { int a1=a, inv=0; while(a1!=0) { inv=inv*10 + a1%10; a1=a1/10; } return inv; } int main() { int a,b; cin>>a>>b; cout<<cmmdc(a,<<endl; cout<<invers(; return 0; } Am facut copie pentru variabile ca poate o sa intelegi cum va trebui sa faci si tu. |
#12
Posted 10 February 2016 - 18:27
jegmihai, on 10 februarie 2016 - 18:09, said:
Cand citesti vectorul de ce pleci de la 1 si cand il parcurgi pleci de la 0 ? Uite, asa s-ar face problema ta pentru 2 numere. Incearca sa o faci cu vector acum : #include <iostream> using namespace std; int cmmdc(int a, int { int b1=b,a1=a; while(a1!=b1) if(a1>b1) a1=a1-b1; else b1=b1-a1; return a1; } int invers(int a) { int a1=a, inv=0; while(a1!=0) { inv=inv*10 + a1%10; a1=a1/10; } return inv; } int main() { int a,b; cin>>a>>b; cout<<cmmdc(a,<<endl; cout<<invers(; return 0; } Am facut copie pentru variabile ca poate o sa intelegi cum va trebui sa faci si tu. Ok,dar eu trebuie sa calculez cmmdc dintre numar si inversul lui Ex: Pentru 234, inversul este 432, iar c.m.m.d.c. (234, 432)=18 |
#13
Posted 10 February 2016 - 18:42
Se pare ca am inteles cerinta gresit, scuze. In cazul asta problema ta devine si mai usoara.
|
#14
Posted 11 February 2016 - 17:33
aLexCM, on 10 februarie 2016 - 18:04, said:
Iti afiseaza 0 deoarece tu acolo afisezi numerele din vector, numere care iau valoarea 0 dupa ce trec prin while-ul ala. Parcurge vectorul. Copiaza fiecare element din vector intr-o alta variabila, invers-ului ii dai valoarea zero si-l bagi la inceputul parcurgerii si apoi pui cele doua while-uri ale tale. La final afisezi cmmdc. Cum pot sa copiez fiecare element in alta variabila? |
#15
Posted 14 February 2016 - 12:46
for(i=1;i<=n;i++ ) {
cin>>x; si dupa afli inversu , faci cmmdc si la final resetezi ( reinitializezi cu 0 ) variabila inv , pentru ca vine urmatorul x ( numar ) din for |
|
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users