Informatică, întrebare adresată de IonutzG, 8 ani în urmă

Am nevoie de rezolvare in C++
Pentru a-l recruta pe cel mai bun, Petru şi Bianca le-au cerut celor 2 candidați să scrie un program care, pentru un şir de n numere naturale sortat crescător și o valoare x dată, să determine poziţia minimă p pe care se găsește valoarea x în şir.

Va intra în echipa Wellcode cel al cărui program va executa sarcina cel mai rapid. Testează-ți și tu abilitățile și rezolvă problema aici, pe platformă

Date de intrare
Programul citește de la tastatură, de pe prima linie, numărul natural n. De pe următoarea linie se citește șirul de n numere naturale, sortate crescător. De pe a treia linie se citește un număr natural m, iar de pe a patra se citesc m numere naturale, reprezentând valori posibile pentru x.

Date de ieșire
Afișează, pentru fiecare dintre cele m numere citite, poziția minimă pe care se găsește în șirul inițial. Valorile vor fi afișate separate prin spații, iar numerotarea pozițiilor se va face începând cu valoarea 1.

Restricții și precizări
1 ≤ n ≤ 500 000
numerele din şir vor avea valori în intervalul [0, 500]
1 ≤ m ≤ 100 000
1 ≤ x ≤ 500
se garantează că valorile lui x citite există întotdeauna în şirul dat
Exemple
Date de intrare
10
1 2 3 4 4 4 5 6 6 7
4
2 4 5 6
Date de ieșire
2 4 7 8

Răspunsuri la întrebare

Răspuns de Apollyon
1

Răspuns:

#include <iostream>

#include <vector>

int main()

{

 size_t dimensiuneVector;

 std::vector<int> vectorNumere, vectorNumereCautate;

/* citim dimensiunea primului vector */

 std::cout << "Introdu N: ";

 std::cin >> dimensiuneVector;

 vectorNumere.reserve(dimensiuneVector);

 /* citim numerele în primul vector */

 for (size_t i{}; i < dimensiuneVector; i++) {

   int nrCitit;

   std::cout << "vectorNumere[" << i << "] = ";

   std::cin >> nrCitit;

   vectorNumere.push_back(nrCitit);

 }

 /* citim dimensiunea la al doilea vector */

 std::cout << "Introdu M: ";

 std::cin >> dimensiuneVector;

 vectorNumereCautate.reserve(dimensiuneVector);

 /* citim numerele în al doilea vector */

 for (size_t i{}; i < dimensiuneVector; i++) {

   int nrCitit;

   std::cout << "vectorNumereCautate[" << i << "] = ";

   std::cin >> nrCitit;

   vectorNumereCautate.push_back(nrCitit);

 }

/* după luăm fiecare număr din al doilea vector */

 for (size_t i{}; i < vectorNumereCautate.size(); i++) {

  /* și îi căutăm poziția în primul vector */

   for (size_t j{}; j < vectorNumere.size(); j++) {

    /* dacă am găsit-o */

     if (vectorNumereCautate.at(i) == vectorNumere.at(j)) {

      /* afișăm index-ul din primul vector + 1 */

       std::cout << j + 1 << " ";

       break;

     }

   }

 }

 return 0;

}


IonutzG: Multumesc(mai ales pentru explicatii) dar mie nu imi functioneaza codul , ai putea sa l mai rezolvi inca o data te rog(poate putin mai simplu(cu if, else, while, for si vectori)
Apollyon: Păi ce mai exact nu îți merge?
IonutzG: primesc punctajul de 0 puncte
IonutzG: cred ca i putin cam prea avansata rezolvarea
Apollyon: Ciudat sincer, eu l-am încercat pe exemplul tău și-mi dă 2 4 7 8, fix cât trebuie
Apollyon: poate e din cauză că ei se așteaptă la "2 4 7 8" și programul îți afișează "2 4 7 8 "
andrei750238: Nu ii plac mesajele de la citire de tip "Introdu N:"
Răspuns de Sergetec
2

Salut!

Rezolvare in C++ fara STL

#include <iostream>

using namespace std;

const int N = 500000, M = 100000;

unsigned int a[N + 1], b[M + 1];

int main()

{

int n, m;

cin >> n;

for (int i = 1; i <= n; ++i)

{

  cin >> a[i];

}

cin >> m;

for (int i = 1; i <= m; ++i)

{

  cin >> b[i];

}

for (int i = 1; i <= m; ++i)

{

  for (int j = 1; j <= n; ++j)

  {

    if (b[i] == a[j])

    {

      cout << j << " ";

      break;

    }

  }

}

return 0;

}

Alte întrebări interesante