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

Generați un vector conținând n valori întregi in intervalul [-100,100]. Mutați valorile
negative la începutul vectorului si cele negative la sfârșitul vectorului( dintr-o singura
parcurgere).

Răspunsuri la întrebare

Răspuns de VxF
0

Răspuns:

#include <iostream>

#include <vector>

#include <ctime>

int main()

{

   std::vector<int> lista;

   int n;

   std::cout << "n: ";

   std::cin >> n;

   lista.reserve(n);

   srand(time(NULL));

   for (int i = 0; i < n; i++) {

       lista.push_back(rand() % 201 - 100);

   }

   std::cout << "Lista originală:" << std::endl;

   for (int i = 0; i < n; i++) {

       std::cout << lista[i] << " ";

   }

   std::cout << std::endl;

   int stanga = 0, dreapta = n - 1;

   while (stanga < dreapta) {

       if (lista[stanga] >= 0 && lista[dreapta] < 0) {

           int temp = lista[stanga];

           lista[stanga] = lista[dreapta];

           lista[dreapta] = temp;

       }

       if (lista[stanga] < 0) {

           stanga++;

       }

       if (lista[dreapta] >= 0) {

           dreapta--;

       }

   }

   std::cout << "Lista aranjată:" << std::endl;

   for (int i = 0; i < n; i++) {

       std::cout << lista[i] << " ";

   }

   std::cout << std::endl;

}

Explicație:

  • Se fac două jumătăți de parcurgeri (una din stânga și una din dreapta)
  • Nu a fost specificat cum să fie tratate valorile 0, așa că se consideră pozitive și sunt mutate las sfârșit
Alte întrebări interesante