Условие взято со сборника задач С.Абрамова и др.
Задача
Даны целые числа [latex]a_1,\ldots,a_n[/latex],[latex]b_1,\ldots,b_n[/latex]. Преобразовать последовательность [latex]b_1,\ldots,b_n[/latex] по правилу: если [latex] a_i \leq 0[/latex], то [latex]b_i[/latex] увеличить в 10 раз, иначе [latex]b_i[/latex] заменить нулем [latex](i=1,\ldots,n[/latex]). Данные принимать до конца входного потока.
Тесты:
№ | Входные данные | Выходные данные |
1 | -1 0 12 4 5 0 1 2 3 4 5 6 | -1 0 12 4 5 0 10 20 0 0 0 60 |
2 | 0 2147483647 | 0 21474836470 |
3 | 1 2 3 4 5 6 7 8 0 0 1 2 3 4 5 6 7 8 9 10 | 1 2 3 4 5 6 7 8 0 0 0 0 0 0 0 0 0 0 90 100 |
Решение:
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 28 29 |
#include <iostream> #include <vector> using namespace std; int main() { vector <long long> a; long long b; while (cin >> b) { a.push_back(b); } for (int i = 0; i < a.size()/2; i++) { if(a[i] <= 0) { a[a.size()/2 + i] *= 10; } else { a[a.size()/2 + i] = 0; } } for (auto c : a) { cout << c << " "; } cout << endl; return 0; } |
Описание решения:
При решении данной задачи был использован тип данных [latex]long long[/latex], так как было необходимо охватить как можно больший диапазон значений. Заданные последовательности чисел будем хранить в одном векторе [latex]a[/latex], где последним элементов первой последовательности будем элемент под номером [latex]a.size()/2-1[/latex]. Отсюда, в цикле будем просматривать каждый элемент первой последовательности. Если данный элемент не положителен, то увеличим в 10 раз соответствующий элемент второй последовательности, иначе, присвоим ему значение нуля. Номер в векторе соответствующего элемента из второй последовательности можно найти по формуле [latex]a.size()/2+i[/latex], где [latex]i[/latex] — это номер элемента из первой последовательности. После прохода по всей первой последовательности, выведем весь вектор на экран.
Код можно запустить и опробовать здесь.
Не нашли как кодируется многоточие? Поменял Ваш способ на \ldots