Другие языки программирования и технологии

Помогите плс я даже вопрос не полностью понял. Надо решить на С++

Даны два неубывающих дека: первый – используя датчик случайных чисел, второй – с клавиатуры. Найти их соединение, то есть неубывающий дек, содержащий все их элементы, причем каждый элемент должен входить в результирующий дек столько раз, сколько он входит в общей сложности в исходные деки.
Дек - это всего лишь двусвязный список, в котором вставка / удаление может производится только в голове и хвосте.

1. Создаём и заполняем два входных двусвязных списка (один - с клавиатуры, другой - программно с помощь. ГСЧ).

2. Сортируем входные списки (банальный MergeSort) по возрастанию.

Таким образом получим два неубывающих дека.

Далее собственно решение задачи:

3. Создаём выходной список.

4. В цикле - пока один из входных списков не закончится: сравниваем головы входных списков, меньшее из значений удаляем из входного списка и добавляем в хвост выходного.

5. Оставшуюся часть входного списка добавляем в конец выходного.
Erlan Beisebayev
Erlan Beisebayev
78 983
Лучший ответ
#include <iostream>
#include <deque>
#include <list>
#include <random>
using namespace std;
deque<int> convert(const list<int>& lst) {
deque<int> box;
for (const auto &item : lst) box.emplace_back(item);
return box;
}
deque<int> rand(const size_t size, int a, int b) {
if (a > b) swap(a, b);
const uniform_int_distribution<> uid(a, b);
random_device rd;
mt19937 gen(rd());
list<int> box;
for (size_t i = 0; i < size; ++i) box.emplace_back(uid(gen));
box.sort();
return convert(box);
}
deque<int> input(const size_t size) {
cout << size << " >>> ";
list<int> box;
int value;
for (size_t i = 0; i < size; ++i) {
cin >> value;
box.emplace_back(value);
}
box.sort();
return convert(box);
}
deque<int> integrate(const deque<int>& a, const deque<int>& b) {
list<int> box;
for (const auto &i : a) box.emplace_back(i);
for (const auto &i : b) box.emplace_back(i);
box.sort();
return convert(box);
}
void output(const deque<int>& dq) {
for (const auto &i : dq) cout << ' ' << i;
cout.put('\n');
}
int main() {
const size_t n = 10;
const auto rnd = rand(n, 1, 25);
const auto inp = input(n);
const auto box = integrate(rnd, inp);
output(rnd);
output(inp);
output(box);
system("pause");
}