Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование С++, решение задачи

Ева Ворую_котиков Ученик (56), на голосовании 4 месяца назад
Помогите с задачей, пожалуйста!
Тема: Стеки и очереди
Создать стек, содержащий целые числа. Перед всеми максимальными числами вставить минимальное число. Порядок следования в результате должен совпадать с порядком следования ввода. Проверка на тестовых данных: Вход - 2 8 4 1 2 8 8 1 2 8. Выход - 2 1 8 4 1 2 1 8 1 8 1 2 1 8
Голосование за лучший ответ
Татьяна Просветленный (36384) 5 месяцев назад
### Шаги для решения задачи:
1. **Создать стек и заполнить его входными данными.**
2. **Найти максимальное и минимальное числа в стеке.**
3. **Создать новую структуру данных для итогового результата (используем очередь для перемежения элементов).**
4. **Проходясь по исходному стеку, перед максимальным числом вставить минимальное.**
5. **Вывести результат.**

### Реализация на C++:
 #include  
#include
#include
#include
#include

int main() {
// Входные данные
std::vector input = {2, 8, 4, 1, 2, 8, 8, 1, 2, 8};

// Создаем стек и заполняем его входными данными
std::stack s;
for (int num : input) {
s.push(num);
}

// Найдем максимальное и минимальное числа
int maxNum = *std::max_element(input.begin(), input.end());
int minNum = *std::min_element(input.begin(), input.end());

// Создаем очередь для результата
std::queue result;

// Используем временный стек для восстановления порядка
std::stack tempStack;

while (!s.empty()) {
tempStack.push(s.top());
s.pop();
}

// Создаем стек для обработки
while (!tempStack.empty()) {
int current = tempStack.top();
tempStack.pop();

if (current == maxNum) {
result.push(minNum);
}

result.push(current);
}

// Вывод результата
while (!result.empty()) {
std::cout << result.front() << " ";
result.pop();
}
std::cout << std::endl;

return 0;
}
### Объяснение кода:
1. Заполнение стека:
- Используем вектор input для хранения исходных данных.
- Заполняем стек s элементами из input.

2. Нахождение максимального и минимального чисел:
- Используем функции std::max_element и std::min_element для нахождения максимального и минимального чисел в векторе input.

3. Восстановление порядка с использованием временного стека:
- Перемещаем элементы из стека s в временный стек tempStack, чтобы восстановить порядок вставки.

4. Обработка элементов:
- Перемещаем элементы из временного стека tempStack в очередь result, вставляя минимальное число перед каждым максимальным числом.

5. Вывод результата:
- Извлекаем и выводим элементы из очереди result.

Этот метод сохраняет порядок элементов и выполняет вставку минимального числа перед каждым максимальным числом, что соответствует заданному условию.
Ева Ворую_котиковУченик (56) 5 месяцев назад
Спасибо огромное!
Похожие вопросы