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 |
Sir de perechi a unui numar .
#1
Posted 15 May 2022 - 12:55
Salut ! Cine ma poate ajuta cu rezolvarea acestei probleme ? Se da un sir de numere , sa se indentifice corect perechea fiecarui numar din sir . Daca A se afla pe pozitie para B este minumul dintre toate numerele mai mari decat A care se gasesc in stanga lui A. Daca A se afla pe pozitie impara B este minimul dintre toate numerele mai mari decat A care se gasesc in dreapta lui A. Sa se afiseze numerele conform cerintei iar daca a nu are o asemenea pereche sa se afiseze - 1.
Restrictii : 0 < n <= 100 0 <= x <= 1.000 Exemplu : 7 19 198 320 0 31 69 499 Date de iesire : 31 -1 499 19 69 198 -1 Ideea mea de rezolvare este urmatoarea! Am parcurs șirul de numere folosind un for de la i la n, iar pe prima linie din instrucțiune am declarat o variabilă pe care am numito numar_minim, la care i-am atribuit valoarea 1000 din restricțiile problemei, in continuare am mai folosit un for de la j la n iar in interiorul lui prima instrucțiune este următoarea : daca (i se afla pe poziție impara si v[j] < numar_minim si v[j] > v[i]) , variabila numar_minim ia valoarea lui v[j].La următoarea instrucțiune am folosit un else if (i se afla pe poziție para si v[j - 1] < numar_minim si v[j - 1] > v[i]) , variabila numar_minim ia valoarea lui v[j-1]. In următoarea instrucție am folosit condiția if( numar_minim < 1000) afiseaza numar_minim altfel afiseaza -1. Codul pe care l-m scris imi arata corect pereche fiecarui numar daca a se afla pe pozitie impara . Dar aici nu ma descurc! Daca A se afla pe pozitie para B este minimul dintre elementele mai mari decat A care se gasesc in stanga lui A. Eu am incercat sa accezez elementele din stanga lui a dar nu am facut corect ! HELP ..... Nu stiu cum sa fac asta corect , ma gandesc de ceva vreme la o solutie corecta si nu imi iasa !.. |
#2
Posted 15 May 2022 - 20:40
int VAL_MAX = 1000; int VAL_NA = -1; int v[100]; int get_b_left(int idx) { int i = 0; int min_val = VAL_MAX + 1; int ref_val = v[idx]; for (i = 0; i < idx; i++) { if (v[i] > ref_val && v[i] < min_val) { min_val = v[i]; } } if (min_val == VAL_MAX + 1) return VAL_NA; return min_val; } int get_b_right(int idx) { int i = 0; int min_val = VAL_MAX + 1; int ref_val = v[idx]; for (i = idx + 1; i < n; i++) { if (v[i] > ref_val && v[i] < min_val) { min_val = v[i]; } } if (min_val == VAL_MAX + 1) return VAL_NA; return min_val; } int main() { <read_input> int i = 0; int val = 0; for (i = 0; i < n; i++) { if (i % 2) { val = get_b_right(i); } else { val = get_b_left(i); } printf("%d ", val); } return 0 } Edited by darkangel2, 15 May 2022 - 20:43. |
#3
Posted 15 May 2022 - 21:52
Mulțumesc pentru timpul acordat! Deși este puțin complicata rezolvarea pentru mine, o sa încerc să înțeleg ce face fiecare linie de cod de acolo și sper ca pe viitor sa scriu și eu cod cel puțin ca și tine. Dacă ești dispus să mă ajuți mai am câteva probleme la care obțin peste 80 de puncte și la toate primesc (limita de timp depășită).
Am încercat să îl rulez ai primesc aceste erori !prog.cpp: In function 'int get_b_right(int)': prog.cpp:24:25: error: 'n' was not declared in this scope for (i = idx + 1; i < n; i++) { ^ prog.cpp: In function 'int main()': prog.cpp:35:1: error: expected primary-expression before '<' token <read_input> ^ prog.cpp:35:2: error: 'read_input' was not declared in this scope <read_input> ^~~~~~~~~~ prog.cpp:37:3: error: expected primary-expression before 'int' int i = 0; ^~~ prog.cpp:40:8: error: 'i' was not declared in this scope for (i = 0; i < n; i++) { ^ prog.cpp:40:19: error: 'n' was not declared in this scope for (i = 0; i < n; i++) { ^ prog.cpp:46:2: error: 'printf' was not declared in this scope printf("%d ", val); ^~~~~~ prog.cpp:46:2: note: 'printf' is defined in header '<cstdio>'; did you forget to '#include <cstdio>'? prog.cpp:1:1: +#include <cstdio> int VAL_MAX = 1000; prog.cpp:46:2: printf("%d ", val); ^~~~~~ prog.cpp:48:11: error: expected ';' before '}' token return 0 ^ ; } ~ Edited by MarianG, 15 May 2022 - 22:16. |
#4
Posted 16 May 2022 - 00:10
if (i%2) { result = pair (sir,sir[i],0,i); // de la zero la pozitie, adica tot ce e la stanga de A } else { result = pair (sir,sir[i],i,len);// de la pozitie la final, adica tot ce e la dreapta de A } Edited by MarianG, 16 May 2022 - 00:12. |
#5
Posted 16 May 2022 - 11:45
Salut. Nu merge codul scris de tine. Primesc erori și pe lângă asta este destul de complicat cum l-ai scris , eu va las un exemplu de cod scris de mine pentru elementele din dreapta lui A , este o soluție de 100 de puncte .
#include <iostream> using namespace std; int const MAX = 100; int const a_thousand = 1000; int main() { int n, v[MAX+1]; cin >> n; for (int i = 1; i <= n; ++i) { cin >> v[i]; } for ( int i = 1; i <= n; ++i) { int min_number = a_thousand; for (int j = 1; j <= n; ++j) { if (v[j] < min_number && v[j] > v[i]) { min_number = v[j]; } } if (min_number < a_thousand) { cout << min_number << " "; } else { cout << "-1 "; } } return 0;Eu în felul acesta rezolv problemele deocamdată! Altfel nu știu ... Sper că m-am făcut înțeles și dacă primesc și ajutor pentru o soluție de 100 puncte pentru afișare elementelor și din stânga conform cerinței de mai sus ar fii super . Mulțumesc
Edited by MarianG, 16 May 2022 - 11:53.
|
#6
Posted 16 May 2022 - 11:57
Iarasi vanati puncte, nu cititi cod si va plangeti ca "nu merge".
Ce nu merge ? pair ? Pai trebuie sa-ti scrii singur functia care sa parcurga sirul de elemente si sa compare elementele. @darkangel2 are cod care "se repeta", asta inseamna ca putem muta codul intr-o singura functie |
#7
Posted 16 May 2022 - 13:10
Salut !Daca nu obții 100 de puncte nu acoperi toate soluțiile deci rezolvarea nu este corectă. Și pe lângă asta eu nu înțeleg codul scris de @darkangel2, am lăsat un exemplu de cod scris de mine sa vă faceți o idee cum scriu eu cod deocamdată( plus că pot explica foarte bine ce face fiecare linie de cod scrisă de mine in exemplu de mai sus) eu nu vreau sa primesc rezolvarea problemei, doar indicii cum sa accesez elementele din stânga. Dacă primesc ajutorul pe care îl cer e foarte bine, iar daca nu până la urmă o voi rezolva eu. Mulțumesc 🙂
|
#8
Posted 16 May 2022 - 16:09
Si ce te opreste sa intrebi specific, pe cod, partile pe care nu le intelegi?
|
#9
Posted 16 May 2022 - 17:53
In stilul C++ de a defini inceputul si finalul unei regiuni prin care vei itera fiecare element:
|
#10
Posted 16 May 2022 - 18:19
Arrowwq, on 15 mai 2022 - 21:52, said:
........... Solutia in C: a_b.txt 662bytes 5 downloads Redenumeste fisierul in "a_b.c". Compileaza cu "gcc a_b.c" => a.out (am folosit un Ubuntu). Executa a.out. Solutia in C++ (pornind de la solutia ta): a_b_2.txt 695bytes 3 downloads Redenumeste fisierul in "a_b_2.cpp". Compileaza cu "g++ a_b_2.cpp" => a.out (am folosit un Ubuntu). Executa a.out. Edited by darkangel2, 16 May 2022 - 18:21. |
|
#11
Posted 16 May 2022 - 18:43
Multumesc Darkangel2! Este o solutie reusita! Si am inteles ce ai facut acolo ! O sa revin si cu alte probleme la care nu iau mai mult de 87 de puncte orice as face ...Este destul de frustrant ) .
|
#12
Posted 16 May 2022 - 20:55
hai sa-ti zic eu ce este frustrant
scrisul "dezordonat" Quote Se da un sir de numere , sa se indentifice corect perechea fiecarui numar din sir . Daca A se afla pe pozitie para B este minumul dintre toate numerele mai mari decat A care se gasesc in stanga lui A. Daca A se afla pe pozitie impara B este minimul dintre toate numerele mai mari decat A care se gasesc in dreapta lui A. Sa se afiseze numerele conform cerintei iar daca a nu are o asemenea pereche sa se afiseze - 1. Quote
//1 Se da un sir de numere //cu restrictii/specificatii intregi/reale, lungime int sir[LUNGIME]; /// citire numere //sa se indentifice corect perechea fiecarui numar din sir . for (pozitie = 0; pozitie < LUNGIME; pozitie ++) if (pozitie % 2 ) // ordinal vs cardinal { // seteaza argumentele pentru itereare la dreapta } else { // seteaza argumentele pentru itereare la stanga } //afiseaza numarul pereche Intrebarea mea, conform cerintelor, cine se ocupa de "-1" ? functia care itereaza si compara sau o verificare suplimentara inainte de afisare ? Edited by MarianG, 16 May 2022 - 21:02. |
#13
Posted 16 May 2022 - 21:16
MarianG, on 16 mai 2022 - 20:55, said:
Intrebarea mea, conform cerintelor, cine se ocupa de "-1" ? functia care itereaza si compara sau o verificare suplimentara inainte de afisare ? Propun: "-1" nu e nimic altceva decat un raspuns valid la intrebarea "cat e B?". Deci codul responsabil pentru determinarea B (oricare ar fi el) determina B = -1 cand e cazul... E ceva in neregula mai jos? MarianG, on 16 mai 2022 - 20:55, said: if (pozitie % 2 ) // ordinal vs cardinal |
#14
Posted 16 May 2022 - 22:56
darkangel2, on 16 mai 2022 - 21:16, said: E ceva in neregula mai jos? prima pozitie a sirului este indexul zero darkangel2, on 16 mai 2022 - 21:16, said:
Propun: "-1" nu e nimic altceva decat un raspuns valid la intrebarea "cat e B?". Deci codul responsabil pentru determinarea B (oricare ar fi el) determina B = -1 cand e cazul... Edited by MarianG, 16 May 2022 - 22:58. |
#15
Posted 16 May 2022 - 23:14
MarianG, on 16 mai 2022 - 22:56, said:
da, este, dar este usor de urmarit, si de "corectat" prima pozitie a sirului este indexul zero Adevarat: am "potrivit-o" ca sa iasa rezultatul din post-ul initial (prima data mi-a iesit altceva..... ) MarianG, on 16 mai 2022 - 22:56, said:
Deci de "minus 1" se ocupa "subrutina" si nu procedura de afisare In mintea mea: procedura de afisare face doar afisare; fiecare minte cu "problemele" ei... |
|
#16
Posted 16 May 2022 - 23:21
Asa ar fi normal, dar enuntul este inselator sau permsiv (dupa cum vede fiecare minte)
Quote Sa se afiseze numerele conform cerintei iar daca a nu are o asemenea pereche sa se afiseze - 1 result = get_pair( ) ; if (result == sir[idx]) result =-1; //afiseaza result Edited by MarianG, 16 May 2022 - 23:22. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users