Задача: А291а
Условие:
Даны действительные числа [latex]a_{1},\ldots,a_{30}.[/latex] Получить [latex]\max (a_{1}+ a_{30},a_{2}+a_{29},\ldots,a_{15}+a_{n}).[/latex]
Тесты:
№ | Входные данные | Выходные данные |
1 | 2 3 5 4 | 8 |
2 | 2 3 7 5 4 | 14 |
3 | 4.5 1.1 3 9.25 0.75 | 10.35 |
4 | -4.5 -2 0 -7.1 5 | 0.5 |
Код программы:
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> #include <cmath> using namespace std; bool f(double a, double b){ //Вспомогательная функция для сортировки вектора по убыванию return a>b; } int main() { vector<double> real; double value; while(cin >> value){ real.push_back(value); } int size = real.size(); int size_of_sum = ceil(size%2==0?size/2:size/2+1); //Размер вектора сумм vector<double> sum; for(int i = 0; i < size_of_sum; i++){ if(i == size_of_sum-1 && size%2 != 0) sum.push_back(2*real[i]);// Средний элемент массива real при нечетном size else sum.push_back(real[i] + real[size - i - 1]); } sort(sum.begin(),sum.end(),f); // Сортировка по убыванию cout << sum[0]; return 0; } |
Решение:
После считывания входного потока данных в вектор [latex]real[/latex] вещественных чисел, вычисляем размер вектора [latex]sum[/latex], равный половине количества элементов входного потока с округлением вверх. В случае нечетного количества элементов, последним элементом вектора [latex]sum[/latex] будет центральный элемент вектора [latex]real[/latex] увеличенный в два раза. Далее, после сортировки полученного вектора по убыванию, выводим первый элемент вектора.
Ссылки:
Задачник по программированию С. Абрамова.
Код программы на ideone.com.
Исправил Ваш оригинальный способ кодирования многоточий и функций в latex.