Задача
Даны действительные числа [latex]{ a }_{ 1 }[/latex]…[latex]{ a }_{ n }[/latex] . Если в результате замены отрицательных членов последовательности [latex]{ a }_{ 1 }[/latex]…[latex]{ a }_{ n }[/latex] их квадратами члены будут образовывать неубывающую последовательность, то получить сумму членов исходной последовательности ; в противном случае получить их произведение.
Входные данные
Последовательность
Выходные данные
Сумма членов, если последовательность неубывающая и их произведение в противном случае.
Тесты
№ | Последовательность | Результат |
1 | 1 2 3 4 | 10 |
2 | 1 2 -3 4 | -24 |
3 | 1 -2 5 6 7 8 | 25 |
4 | -1 -1 -2 -3 -4 -5 | -16 |
Код
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 30 |
#include <iostream> #include <vector> using namespace std; int main() { vector <double> x; //задаем элемент типа vector double a,m=0,k=0,n=0; while(cin>>a){ //вводим последовательность x.push_back(a); //для дальнейшего преобразования последовательности } for(int i=0;i<x.size();i++)n+=x[i]; //находим сумму for(int i=0;i<x.size();i++){ if(i==0)k=x[0]; else k*=x[i]; } //и произведение исходной последовательности for(int i=0;i<x.size();i++){ //задаем цикл, в котором заменяем все отрицательные элементы их квадратами if(x[i]<0)x[i]=x[i]*x[i]; if(x[i]<m){ //проверяем возрастаемая последовательность или нет m=0; break; } m=x[i]; } if(m!=0){ //если возрастающая - то выводим сумму cout<<n; } else { cout<<k; //если нет - то произведение } } |
Решение
Предлагаю следующее решение. Записываем каждый член последовательности в элемент типа vector. Сразу находим их сумму и произведение. Затем заменяем каждый отрицательный элемент его квадратом и проверяем возрастающая ли последовательность. Если да — то выводим сумму, если нет — то произведение.
Код на ideone.