Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cu ce va aparati de cainii agresi...

Nu imi platiti coletul cu cardul ...

Mi-au disparut amigdalitele ?

Exista vreun plan de terorizare p...
 Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 

Sir de perechi a unui numar .

- - - - -
  • Please log in to reply
15 replies to this topic

#1
Arrowwq

Arrowwq

    New Member

  • Grup: Candidate Members
  • Posts: 17
  • Înscris: 12.01.2022
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
darkangel2

darkangel2

    Senior Member

  • Grup: Senior Members
  • Posts: 3,369
  • Înscris: 26.01.2019
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
Arrowwq

Arrowwq

    New Member

  • Grup: Candidate Members
  • Posts: 17
  • Înscris: 12.01.2022
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
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,440
  • Înscris: 10.08.2005
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
Arrowwq

Arrowwq

    New Member

  • Grup: Candidate Members
  • Posts: 17
  • Înscris: 12.01.2022
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.
tag-uri code


#6
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,440
  • Înscris: 10.08.2005
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
Arrowwq

Arrowwq

    New Member

  • Grup: Candidate Members
  • Posts: 17
  • Înscris: 12.01.2022
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
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,440
  • Înscris: 10.08.2005
Si ce te opreste sa intrebi specific, pe cod, partile pe care nu le intelegi?

#9
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
In stilul C++ de a defini inceputul si finalul unei regiuni prin care vei itera fiecare element:



#10
darkangel2

darkangel2

    Senior Member

  • Grup: Senior Members
  • Posts: 3,369
  • Înscris: 26.01.2019

 Arrowwq, on 15 mai 2022 - 21:52, said:

...........

Solutia in C:
Attached File  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):
Attached File  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
Arrowwq

Arrowwq

    New Member

  • Grup: Candidate Members
  • Posts: 17
  • Înscris: 12.01.2022
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
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,440
  • Înscris: 10.08.2005
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

  • Se da un sir de numere  ,

  • sa se indentifice corect perechea fiecarui numar din sir .

  • Daca A se afla pe pozitie para  B este minimul 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.
//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
darkangel2

darkangel2

    Senior Member

  • Grup: Senior Members
  • Posts: 3,369
  • Înscris: 26.01.2019

 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
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,440
  • Înscris: 10.08.2005

 darkangel2, on 16 mai 2022 - 21:16, said:

E ceva in neregula mai jos?
da, este, dar este usor de urmarit, si de "corectat"
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...
Deci de "minus 1" se ocupa "subrutina" si nu procedura de afisare

Edited by MarianG, 16 May 2022 - 22:58.


#15
darkangel2

darkangel2

    Senior Member

  • Grup: Senior Members
  • Posts: 3,369
  • Înscris: 26.01.2019

 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..... :D)

 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... :D

#16
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,440
  • Înscris: 10.08.2005
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
prin urmare putem avea functia care returneaza numarul curent, iar inainte de afisare sa avem un if;
result = get_pair( ) ;
if (result == sir[idx]) result =-1;
//afiseaza result


Edited by MarianG, 16 May 2022 - 23:22.


Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate