Условие
Дана последовательность действительных чисел [latex]a_1, a_2, \dots, a_n[/latex]. Требуется домножить все члены последовательности на квадрат её наименьшего члена, если [latex]a_1 \geq 0[/latex], в противном случае — на квадрат наибольшего.
Решение
Для решения воспользуемся стандартным классом vector. Для этого заведем переменную данного типа, заполним её числами со входного потока. Далее, в зависимости от первого (нулевого) элемента вектора, воспользуемся стандартной функцией min_element() или max_element() (библиотека algorithm). Далее умножим каждый элемент на (соответственно) минимум/максимум и выведем последовательность.
Тесты
№ | Входные данные | Выходные данные |
1 | -2 2 43 5 -10 12 0 -1 | -3698 3698 79507 9245 -18490 22188 0 -1849 |
2 | 0 100 99 0 -1 1 | 0 100 99 0 -1 1 |
3 | 42 1 1 1 0 -1 24 -24 -42 | 74088 1764 1764 1764 0 -1764 42336 -42336 -74088 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> x; int a; while (cin >> a) x.push_back(a); if (x.at(0) >= 0) { int min = *min_element(x.begin(), x.end()); for (int &i : x) i *= min * min; } else { int max = *max_element(x.begin(), x.end()); for (int &i : x) i *= max * max; } for (int i : x) cout << i << " "; return 0; } |
Замечание
Перед изменением значения членов последовательности и их выводом нам необходимо найти минимум или максимум, для чего необходимо знать значения всех её членов. В связи с этим, решить задачу в формате «считал — вывел» (потоковой обработкой) невозможно.
Ссылки
Код на ideaone (vector).
Хорошо, принято.