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:
#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