bDyds Posted May 21, 2012 Report Posted May 21, 2012 Salut, am mai postat programul cu spanzuratoarea pentru atestat, am vorbit cu profa si mi-a dat alta problema. Problema este ca nici la aceasta nu am idei prea stralucite.Se da un vector a[n].1. Sa se determine frecventa de aparitie a fiecarui numar in vectorul A (de cate ori apare fiecare element)2. Sa se determine cea mai lunga frecventa crescatoare.3. Sa se termine toate secventele care incep si se termina cu numere palindroameNu doresc neaparat sa-mi dati mura-n gura, doar sa-mi explicati cum trebuie.LE: Prima problema m-am gandit sa o fac asa, insa fara succes..#include <iostream.h>void citire(int &t, int x[20]){cout<<"Dati numarul elementelor vectorului"; cin>>t; cout<<"Dati elementele vectorului"; for(int i=1;i<=t;i++) cin>>x[i];}void cresc(int t, int x[20]){int a; for(int i=1;i<=t-1;i++) for(int j=i+1;j<=t;j++) if(x[i]>x[j]) {a=x[i]; x[i]=x[j]; x[j]=a; }}void main(){int a[20], n, i, j, k;citire(n, a);cresc(n, a);k=0;for(i=1;i<=n-1;i++) for(j=i+1;j<=n;j++) if(a[i]==a[j]) k++; else cout<<"Numarul de aparitii al lui "<<a[i]<<"este de "<<k<<"ori."<<endl; k=0;} Quote
bDyds Posted May 21, 2012 Author Report Posted May 21, 2012 Am reusit sa fac prima problema:#include <iostream.h>void citire(int &t, int x[20]){cout<<"Dati numarul elementelor vectorului"; cin>>t; cout<<"Dati elementele vectorului"; for(int i=1;i<=t;i++) cin>>x[i];}void cresc(int t, int x[20]){int a; for(int i=1;i<=t-1;i++) for(int j=i+1;j<=t;j++) if(x[i]>x[j]) {a=x[i]; x[i]=x[j]; x[j]=a; }}void main(){int a[20], n, i, j, k;citire(n, a);cresc(n, a);k=1;for(i=1;i<=n;i++) {if(a[i]==a[i+1]) k++; else {cout<<"Numarul de aparitii al lui "<<a[i]<<" este de "<<k<<" ori."<<endl; k=1; } }} Quote
phreak Posted May 21, 2012 Report Posted May 21, 2012 Cam asa ar trebui sa arate codul tau : Ideone.com | Online C++ Compiler & Debugging Tool . Eu nici daca as vrea sa te ajut cu tema nu te-as ajuta avand in vedere ca ar trebui sa ma chinui sa inteleg ceva la cum l-ai formatat tu. Quote
bDyds Posted May 21, 2012 Author Report Posted May 21, 2012 Cam asa ar trebui sa arate codul tau : Ideone.com | Online C++ Compiler & Debugging Tool . Eu nici daca as vrea sa te ajut cu tema nu te-as ajuta avand in vedere ca ar trebui sa ma chinui sa inteleg ceva la cum l-ai formatat tu.Asta am facut si eu, daca m-ai putea ajuta cu problema 2 te rog, ti-as fi foarte recunoscator. Macar cu ideea, daca nu doresti sa iti storci creierii:D Quote
phreak Posted May 21, 2012 Report Posted May 21, 2012 Longest Increasing Subsequence - AlgorithmistTu chiar nu observi nici o diferenta intre ce ti-am dat eu si ce ai scris tu? "esenta" e aceeasi , diferenta e ca codul tau e GREU DE CITIT si cand vrei sa te ajute cineva incerci sa-i usurezi munca cat mai mult. Quote
ionut.hulub Posted May 21, 2012 Report Posted May 21, 2012 faci un for care parcurge vectorul incepand cu al doilea element.la inceput ai o variabila contor pe care o initializezi cu 1 si o variabila max pe care o initializezi cu 1 si o variabila care retine ca ce pozitie incepe cea mai lunga secventa. o sa o numic inceput si o sa o initializezi cu 0.dupa aia la fiecare iteratie a forului:-daca elementu curent a mai mare ca precedentul atunci contor++-daca nu atunci verifici daca contor e mai mare decat max. in caz afirmativ max ia valoarea contor si variabila inceput ia valoarea i (unde i e variabila de iteratie a forului) - contor.dupa ce iese din for mai faci un for de la variabila inceput pana la inceput+max in care afisezi vector Quote
bDyds Posted May 21, 2012 Author Report Posted May 21, 2012 (edited) Multumesc pentru raspunsul rapid nemesis. Am facut cum mi-ai spus si nu imi afiseaza nimic. Uite ce am facut:#include <iostream.h>#include <values.h>void citire(int &t, int x[20]){cout<<"Dati numarul elementelor vectorului"; cin>>t; cout<<"Dati elementele vectorului"; for(int i=1;i<=t;i++) cin>>x[i];}void main(){int a[20], n, i, t, k, tmax=-MAXINT, kmax=-MAXINT;citire(n ,a);for(i=1;i<=n;i++) if(a[i]<=a[i+1]) k++; else {t=a[i-k+1]; if(tmax<t) tmax=t; if(kmax<k) kmax=k; k=0; }for(i=tmax;i<=kmax;i++) cout<<a[i];}In t am retinut prima cifra din fiecare secventa cu a[i-k+1], k fiind numarul de elemente crescatoare consecutive.Imi pare rau, nu am inteles la ce te referi phreak, o sa scriu pe situl acela codul de acum.Edit: cred ca ar fi trebuie t=i-k+1, dar nu merge nici asa..http://ideone.com/4ybly daca ajuta cu ceva. Edited May 21, 2012 by bDyds Quote
bDyds Posted May 21, 2012 Author Report Posted May 21, 2012 Corect, am facut corectarile de rigoare, insa tot nu afiseaza ce trebuie.#include <iostream.h>#include <values.h>void citire(int &t, int x[20]){cout<<"Dati numarul elementelor vectorului"; cin>>t; cout<<"Dati elementele vectorului"; for(int i=1;i<=t;i++) cin>>x[i];}void main(){int a[20], n, t, i, k=0, tmax=-MAXINT, kmax=-MAXINT;citire(n ,a);for(i=1;i<=n;i++) if(a[i]<=a[i+1]) k++; else {t=i-k+1; if(tmax<t) tmax=t; if(kmax<k) kmax=k; k=0; }for(i=tmax;i<=tmax+kmax;i++) cout<<a[i];} Quote
ionut.hulub Posted May 21, 2012 Report Posted May 21, 2012 (edited) http://ideone.com/x9FjTla a treia problema faci o functie care primeste argument un numar intreg (int) si determina daca numarul e palindrom sau nu, returnand 1 in caz afirmativ, si 0 in caz contrar.dupa o sa ai ceva gen:for (int i = 0; i < nrElem; i++) if (palindrom(vector[i]) == 1) for(int j = i+1; j < nrElem; j++) if (palindrom(vector[j]) == 1) { for (int k = i; k < j; k++) cout<<vector[k]<<" "; cout<<"/n"; } Edited May 21, 2012 by NemesisITSC Quote
bDyds Posted May 21, 2012 Author Report Posted May 21, 2012 Ideone.com | Online C++ Compiler & Debugging Toolla a treia problema faci o functie care primeste argument un numar intreg (int) si determina daca numarul e palindrom sau nu, returnand 1 in caz afirmativ, si 0 in caz contrar.dupa o sa ai ceva gen:for (int i = 0; i < nrElem; i++) if (palindrom(vector[i]) == 1) for(int j = i+1; j < nrElem; j++) if (palindrom(vector[j]) == 1) { for (int k = i; k < j; k++) cout<<vector[k]<<" "; cout<<"/n"; }Multumesc pentru raspunsuri, mi-au fost de foarte mare ajutor. La a treia problema am trisat putin si am schimbat enuntul: Sa se afiseze cea mai lunga secventa care incepe si se termina cu un palindrom. Am aflat care este pozitia primului palindrom, care este pozitia ultimului folosind o functie, cum ai zis si tu, si am afisat elementele din vector de la pozitia primului palindrom pana la pozitia ultimului palindrom.Multumesc again pentru raspunsuri. Quote