Valoare apropiată ( c++)

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

Exemplu

Date de intrare Date de ieșire
7
24 248 456 0 35 74 554 35 -1 554 24 74 248 -1

Împarți nota cu noi, da? :smiling_face_with_three_hearts:

2 Likes

Pasinuea mea nu este c++

1 Like

initial am crezut ca, Cosmin e baiatul lui si vrea sa-l laude aici… :rofl: :facepalm:

2 Likes

https://chat.openai.com/chat

doar ca, Vector cel mai probabil bate la ochi, mai trebuie adjustat codul defapt.

#include <iostream>
#include <vector>

using namespace std;

vector<int> gaseste_pereche(int n, vector<int> sir) {
  // Initializam un vector de perechi cu valori -1
  vector<int> perechi(n, -1);
  
  // Parcurgem sirul de numere
  for (int i = 0; i < n; i++) {
    // Verificam daca numarul se afla pe o pozitie pară sau impară
    if (i % 2 == 0) {
      // Numarul se afla pe o pozitie pară, deci trebuie sa parcurgem sirul din stânga pentru a gasi perechea
      int minim = INT_MAX;
      for (int j = i-1; j >= 0; j--) {
        if (sir[j] > sir[i] && sir[j] < minim) {
          minim = sir[j];
          perechi[i] = minim;
        }
      }
    } else {
      // Numarul se afla pe o pozitie impară, deci trebuie sa parcurgem sirul din dreapta pentru a gasi perechea
      int minim = INT_MAX;
      for (int j = i+1; j < n; j++) {
        if (sir[j] > sir[i] && sir[j] < minim) {
          minim = sir[j];
          perechi[i] = minim;
        }
      }
    }
  }
  
  // Returnam vectorul de perechi
  return perechi;
}

int main() {
  // Testam functia
  vector<int> sir = gaseste_pereche(5, {1, 3, 6, 2, 4});
  
  for (int i = 0; i < sir.size(); i++) {
    cout << sir[i] << " ";
  }
  cout << endl;  // Ar trebui sa afiseze 3 6 -1 4 -1
  
  return 0;
}

Edit 2, i-am spus ca a dat gresit, si a adjustat :slight_smile:


#include <iostream>
#include <vector>
#include <stack>

using namespace std;

vector<int> gaseste_pereche(int n, vector<int> sir) {
  // Initializam un vector de perechi cu valori -1
  vector<int> perechi(n, -1);
  
  // Initializam o stiva pentru a memora numerele mai mari decât numarul curent
  stack<int> stiva;
  
  // Parcurgem sirul de numere
  for (int i = 0; i < n; i++) {
    // Daca stiva este goala sau numarul curent este mai mic decât ultimul numar din stiva, il adaugam la stiva
    if (stiva.empty() || sir[i] < stiva.top()) {
      stiva.push(sir[i]);
    } else {
      // Numarul curent este mai mare decât ultimul numar din stiva, deci il scoatem din stiva până când gasim un numar mai mare decât numarul curent, care va fi perechea numarului curent
      while (!stiva.empty() && stiva.top() < sir[i]) {
        perechi[stiva.top()] = sir[i];
        stiva.pop();
      }
      stiva.push(sir[i]);
    }
  }
  
  // Returnam vectorul de perechi
  return perechi;
}

int main() {
  // Testam functia
  vector<int> sir = gaseste_pereche(7, {24, 248, 456, 0, 35, 74, 554});
  
  for (int i = 0; i < sir.size(); i++) {
    cout << sir[i] << " ";
  }
  cout << endl;  // Ar trebui sa afiseze 35 -1 554 24 74 248 -1
}

daca vector ar bate la ochi, stack e si mai si.

Nu era destul Photomath, acum mai exista si ChatGPT :smiley:

Eu daca as fi profesor sau un elev chiar bun cred ca as innebuni, daca inveti ceva in plus o sa para ca folosesti ChatGPT/AI/Photomath, daca nu inveti ci copiezi iarasi se vede de la o posta ca nu e codul tau. Ca si profesor trebuie sa tii minte stilul fiecarui elev ca sa iti dai seama daca a folosit ceva aplicatie pentru teme/test sau nu.

Salutare !
Multumesc pentru ajutor , am o problema in cod , si nu stiu cum as putea sa o rezolv "

prog.cpp: In function 'int main()':
prog.cpp:28:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   for (int i = 0; i < sir.size(); i++) {

Acuma dacă nu înțelegi eroarea aia…ce să zic…

1 Like

este un warning.
poti sa il ignori

1 Like