Informatică, întrebare adresată de Utilizator anonim, 8 ani în urmă

Valoare Apropiata
Rezolvare in C++ cu if,else, while, for va rog, dau coroana
Pasiunea lui Cosmin pentru jocuri video l-a determinat să se apuce de programare, pentru a putea crea și el jocuri pentru alți oameni. După ce a lansat câteva aplicații simple pe Play Store, a construit un joc multiplayer.

Dinamica jocului e următoarea:

Fiecare jucător primește la început un cartonaș cu un șir de n numere naturale
Pentru a câștiga, jucătorul trebuie să identifice corect PERECHEA fiecărui număr din șirul de pe cartonașul său de joc.
O pereche a unei valori x din șirul de pe un cartonaș este un număr y care face parte din același șir și are următoarea proprietate:

dacă x se află pe poziție pară, y e minimul dintre numerele mai mari decât x care se găsesc în stânga lui x în șir
dacă x se află pe poziție impară, y e minimul dintre numerele mai mari decât x care se găsesc în dreapta lui x în șir
Date de intrare
Pe prima linie se va găsi un număr natural n, reprezentând numărul total de valori de pe un cartonaș, iar pe următoarea linie un șir de n numere naturale, reprezentând elementele șirului de numere de pe acel cartonaș.

Date de ieșire
Programul va afișa pe ecran un șir de n numere, reprezentând șirul de perechi corespunzătoare fiecărui element x din șir. Dacă există un număr x care nu are o astfel de pereche în șir, se va afișa valoarea -1 în locul perechii sale.

Restricții și precizări
0 < n ≤ 100
0 ≤ x ≤ 1 000

Răspunsuri la întrebare

Răspuns de andrei750238
4

#include <iostream>

using namespace std;

int main() {

int n;

int v[101];

//Citire vector

cin >> n;

for (int i = 1; i <= n; i++) cin >> v[i];

for (int px = 1; px <= n; px++) {

 //Daca e pozitie para

 if (px % 2 == 0) {

  //Cauta min dintre numerele mai mari din stanga

  int mn = -1;

  for (int py = 1; py < px; py++)

   if (v[py] > v[px] && (v[py] < mn || mn == -1)) mn = v[py];

  //Afiseaza solutie

  cout << mn << " ";

 }

 //Daca e pozitie impara

 else {

  //Cauta min dintre numerele mai mari din dreapta

  int mn = -1;

  for (int py = px + 1; py <= n; py++)

   if (v[py] > v[px] && (v[py] < mn || mn == -1)) mn = v[py];

  //Afiseaza solutie

  cout << mn << " ";

 }

}

}

NOTA :

Am modificat programul pentru inceperea sirului de la 1.

Anexe:

mariamagdalena2269: Buna Andrei! Solutia arata bine, insa pentru exemplul urmator nu functioneaza :
Date de intrare
7
24 248 456 0 35 74 554
Date de iesire
35 -1 554 24 74 248 -1
Ai putea sa ma ajuti? Multumesc !
andrei750238: Dupa cum am zis in [NOTA], nu se precizeaza daca indexarea incepe de la 0 sau de la 0 in cerinta, si nici nu mi s-a dat un exemplu.
andrei750238: Voi modifica mai tarziu raspunsul pentru a incepe de la 1
andrei750238: Modificat.
Alte întrebări interesante