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 |
Lungime maxima secventa descrescatoare intr-o lista simplu inlantuita
Last Updated: Mar 24 2019 12:48, Started by
Cognitivul
, Mar 22 2019 20:31
·
0
#1
Posted 22 March 2019 - 20:31
Salut!Am incercat astazi sa rezolv o problema,doar ca fara foarte mare progres.Enunt:Se da o lista simplu inlantuita(o aloc dinamic).Trebuie sa scriu o functie care imi printeaza indicii de inceput si de sfarsit ale secventei de lungime maxima ,descrescatoare (daca sunt 2 astfel de secvente,o printez pe prima).
Exemplu: 4,2,3 , 4 ,6 , 5, -10, 2 , 1, 0 Se printeaza indicii 5 si 7 intrucat prima si cea mai mare secventa descrescatoare este "6 , 5 , -10" ; Ma gandesc ca trebuie sa parcurg lista. Daca Exista L->urm si L-info < L->urm->info void IndiciSecvMaxDesc(TLista L ) //TLista e o structura ; Celula de lista are campul "info" , un int si campul adresa "urm". { int poz=0,inc=1,sf=1,lungime=1; for( ; L!=NULL ; L=L->urm ) //parcurgere lista { poz++; if(L-urm != NULL) if(L->info < L->urm->info) // ordine crescatoare si trebuie reactualizat indice inceput. /* acum nu stiu cat de departe sa ma duc si cum sa gasesc lungimea maxima a secventei */ } } Multumesc pentru ajutor! Edited by Cognitivul, 22 March 2019 - 20:34. |
#2
Posted 22 March 2019 - 21:02
Programul trebuie facut doar in C si cum as putea sa ordonez lista ?Daca puteam folosi vectori,era usor.Doar ca nu stiu cum sa ma descurc cu legaturile.Trebuie sa folosesc doar Liste Simplu Inlantuite.
Edited by Cognitivul, 22 March 2019 - 21:03. |
#3
Posted 22 March 2019 - 21:18
BraviaAmpero, on 22 martie 2019 - 20:52, said:
-10 0 1 2 3 4 4 5 6 7 10 9 8 3 1 4 6 5 Sirul de indicii este imaginea transformata (codomeniu) sirului de numere (domeniu) prin ordonarea crescatoare(transformare) al domeniului. Astfel, 5 si 7 sunt indicii captelor de interval al imaginei transformate. Iti poti crea un map de perechi de tipul (x,y) unde x = valoare, y=indecs al valorii, si apoi ordonezi crescator hash-mapul dupa cheile mapului(adica valorile de x) si apoi scoti prima si ultima valoare din valorile map-ului Map-ul trebuie sa definit conform prototipului : Map<Key, List<Value>> (doarece am observat ca poti avea chei duble) Daca vrei poti sa mergi pe expresii lambda, din cate am vazut ca C++ a inceput sa suporte(intr-un final)acest lucru https://en.cpprefere...language/lambda |
#4
Posted 22 March 2019 - 21:19
Tii inceputul si lungimea celei mai lungi secvente gasite pana acum, respectiv cea curenta, precum si (pointerul la) elementul anterior. Initial sunt ambele zero, unu, si primul element.
Parcurgi lista, incepand cu al doilea element. Daca e mai mic decat cel de dinainte sau ai ajuns la capatul listei, incrementezi lungimea secventei curente. Altfel, secventa curenta s-a terminat. Daca e mai lunga decat cea mai lunga de pana acum, copiezi acolo valorile. Resetezi lungimea secventei curente. Cand ajungi la capatul listei ai raspunsul. Comparatia include egalitatea, daca secventele nu trebuie sa fie _strict_ descrescatoare. |
#5
Posted 22 March 2019 - 21:20
Problema trebuie rezolvata doar cu Liste Simplu Inlantuite fara alocari statice de memorie.
Ideea e ca stiu sa fac parcurgerea.Pseudocodul,sa zic,nu mi-ar fi clar. Multumesc,incerc acum. Edited by Cognitivul, 22 March 2019 - 21:21. |
#6
Posted 23 March 2019 - 00:00
_bcristian_, on 22 martie 2019 - 21:19, said:
Tii inceputul si lungimea celei mai lungi secvente gasite pana acum, respectiv cea curenta, precum si (pointerul la) elementul anterior. Initial sunt ambele zero, unu, si primul element. Parcurgi lista, incepand cu al doilea element. Daca e mai mic decat cel de dinainte sau ai ajuns la capatul listei, incrementezi lungimea secventei curente. Altfel, secventa curenta s-a terminat. Daca e mai lunga decat cea mai lunga de pana acum, copiezi acolo valorile. Resetezi lungimea secventei curente. Cand ajungi la capatul listei ai raspunsul. Comparatia include egalitatea, daca secventele nu trebuie sa fie _strict_ descrescatoare. |
#7
Posted 23 March 2019 - 16:42
ia pune aici codul sursa rezulat.Sunt foarte curios ce ai inteles si "ce a mers".
|
#8
Posted 23 March 2019 - 20:57
Multumesc pentru ajutor!
void PozIncFinSecvPoz(TLista L) { int incmax, sfmax, l, max = 0; int poz = 1, inc = 1, sf = 1; TLista p = L; if (L != NULL) { if (L->urm != NULL) L = L->urm; } for (; L != NULL; L = L->urm) { poz++; if (p->info > L->info) { sf = poz; l = sf - inc + 1; if (l > max) { incmax = inc; sfmax = sf; max = l; } } if (p->info < L->info) { inc = poz; } p = p->urm; } printf("\n%d %d\n ", incmax, sfmax); }
Edited by dani.user, 24 March 2019 - 10:47.
|
#9
Posted 23 March 2019 - 23:24
pune si declaratia tipului TLista
Edited by BraviaAmpero, 23 March 2019 - 23:24. |
#10
Posted 24 March 2019 - 00:19
Congnitivule este o problema: nu se printeaza indecsii 5 si 7 ,conform sirului dat initial:
Avem lista : valoare_nod=4 valoare_nod=2 valoare_nod=3 valoare_nod=4 valoare_nod=6 valoare_nod=5 valoare_nod=-10 valoare_nod=2 valoare_nod=1 valoare_nod=0ia uite ce se intampla in solutia data de tine (in bucla for), da click pe poza pt marire: cognitivul.PNG 3.97K 4 downloads Orit tu ai zis ca este absolut perfect, insa indecsii ies ca 6 si 8. Poti te rog sa clarifici aceste diferente? 2.Esti absolut sigur ca virgula codul sursa de tine la sfarsit sigur se compileaza in C ? Edited by BraviaAmpero, 24 March 2019 - 00:22. |
|
#11
Posted 24 March 2019 - 00:53
#12
Posted 24 March 2019 - 10:40
Da sunt sigur ! Eu in C l-am compilat.
Cat despre pozitie, primul elelement din lista are pozitia 1.Daca se presupune ca primul element are pozitia 0,atunci int poz=0 ( pe al doilea rand); |
#14
Posted 24 March 2019 - 11:59
BraviaAmpero, on 24 martie 2019 - 11:48, said:
ia pune aici tot codul, absolut tot codul. |
#15
Posted 24 March 2019 - 12:48
Cine vrea sa exerseze C++ e invitat sa vina cu o solutie generica la aceasta problema, solutie ce ar functiona cu orice forward iterator si mod de comparare.
|
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users