А137б

Задача

Даны натуральное [latex]n[/latex], действительные числа [latex]a_{1},\ldots,a_{n}[/latex]. Вычислить: [latex]a_{1}^{2},a_{1}a_{2},\ldots,a_{1}a_{n}[/latex]

Входные данные

Натуральное [latex]n[/latex], действительные числа [latex]a_{1},\ldots,a_{n}[/latex].

Выходные данные

[latex]a_{1}^{2},a_{1}a_{2},\ldots,a_{1}a_{n};[/latex]

Тесты

Входные данные Выходные данные
6 4 -2 1.5 3 7 9 16 -8 6 12 28 36
12 7 5 -1 2.7 5 49 35 -7 18.9 35

Решение

Для решения этой задачи воспользуемся циклом for . Сначала прочитаем n . После этого прочитаем первую переменную и напечатаем ее квадрат. Далее в цикле будем cчитывать остальные $latex n$ переменных и выводить их произведения на первую переменную.

Пример работы программы можно увидеть на ideone.

e-olimp 7365

Ссылка на оригинал задачи

Задача «Молоко и пирожок»

Ученикам первого класса дополнительно дают стакан молока и пирожок, если вес первоклассника менее 30 кг. В первых классах школы учится [latex]n[/latex] учеников. Стакан молока имеет емкость 200 мл, а упаковки молока – 0.9 л. Определить количество дополнительных пакетов молока и пирожков, необходимых каждый день.

Тесты:

Количество детей Вес Количество упаковок молока Количество пирожков
3 30 29 30 1 1
5 25 41 56 20 20 1 3
4 30 30 30 30 0 0
7 25 26 27 28 29 23 24 2 7

Код:

Алгоритм:

  1. Объявление и ввод значений переменных.
  2. Используем цикл for для подсчета необходимого количества пирожков.
  3. На основе предыдущих данных и округления в большую сторону (метод  Math.ceil ), подсчитываем необходимое количество пакетов молока.
  4. Окончание работы программы.

Работающая версия программы на Ideone.com

Ссылка на источник

А136л

Постановка задачи

Даны натуральное число $latex n$, действительные числа $latex a_1,\cdots,a_n$. Вычислить: $latex |a_1*a_2*\cdots*a_n|$.

Тесты

$latex n$ $latex a_1$ $latex a_2$ $latex a_3$ $latex a_4$ $latex a_5$ $latex a_6$ $latex a_7$ $latex a_8$ $latex k$
4 5 -3 2 1 5.477225575051661
5 2 7 4 3 5 28.982753492378876
3 4 4 0 0
5 3 8 6 2.8 1.3 22.894541

Код

 

Описание решения

Объявляем переменную $latex n$ (количество элементов — это целое число, поэтому используем тип int) и переменную $latex p$ (произведение), она может быть вещественной, поэтому выбираем тип double.

В цикле for считываются элементы $latex a_1,\cdots,a_n$, где   вычисляется их произведение.

После цикла вычисляется корень из модуля произведений элементов.

Посмотреть, как работает программа можно на сайте  ideone.
Задача была переделана из данного решения.

MS 7. Средняя зарплата

Задача. Во входном потоке следует заранее неизвестное количество строк, в каждой из которых указана фамилия и величина зарплаты одного из сотрудников. Вычислите величину средней по компании заработной платы.

Входные данные
Фамилия работника name и величина его зарплаты salary.

Выходные данные
Средняя зарплата по компании.

Тесты

Входные данные Выходные данные
name salary  totalSalary/employeesNum
1. Ivanov 100 100
Ivanov 300 200
2. Smirnov 150 150
3. Popov 200 200

Код программы

Пояснение

С потока данных считывается первое значение и записывается в переменную name. Затем считывается заработная плата и записывается в переменную sal. В переменную total записывается общая полученная сумма работниками, увеличивается счетчик количества выплат sum. Средняя зарплата считается по формуле среднего арифметического: [latex]x = \frac{total}{sum}[/latex] и выводится потоком вывода.

Ссылка на код по тесту 1.

Ссылка на источник.

 

MS1. Сумма всех нечетных чисел в диапазоне.

Задача

Необходимо суммировать все нечётные целые числа в диапазоне, который введёт пользователь с клавиатуры.

Тесты

Начало диапазона Конец диапазона Вывод
1 11 36
2 8 15
7 30 216

Решение

Задача(2)

MS13. Решение квадратных уравнений

Постановка задачи
Каждая четвёрка чисел входного потока представляет собой квадратное уравнение в такой форме [latex]ax^2+bx+c=d.[/latex] Выпишите через запятую решения этих уравнений (если это возможно).

Входные данные:
значения переменных

Выходные данные:
корни [latex]x_{1}[/latex], [latex]x_{2}[/latex], [latex]x_{3}[/latex] и нет корней

Тесты

Входной поток чисел Корни уравнений
1 2 -3 4 1 0 13 10 0 нет корней;
2 2 -0.5 2.2 0 5 0 -25 0 нет корней; -2.23607, 2.23607;
3 1 3 -4 -1 2 -7 11 0 -3.79128784747792, 0.7912878474779199; нет корней;

Решение

Ссылка на решение задания на онлайн компиляторе Ideone.com

Описание решения

Объявляем переменные a, b, c, d, D, x1x2, x3 типа double, где a, b, c, d — коефициенты квадратического уравнения, D — дискриминант, а x1x2, x3 — корни. Создаем цикл while, в котором производится решение квадратического уравнения. В нем проверяем, если дискриминант больше нуля, выводим корни x1 и x2. Если дискриминант равен нулю, то находим x3, иначе, если дискриминант отрицателен — не имеем корней (no roots).

А170

Постановка задачи

Даны натуральные числа [latex]n, a_{1}, a_{2},\ldots, a_{n} (n\geq 4)[/latex]. Числа [latex]a_{1}, a_{2},\ldots , a_{n}[/latex] — это измеренные в сотых долях секунды результаты [latex]n[/latex] спортсменов в беге на [latex]100[/latex] м. Составить команду из четырех лучших бегунов для участия в эстафете [latex]4\times100[/latex], т.е. указать одну из четверок натуральных чисел [latex]i, j, k, l[/latex], для которой [latex]1\leq i\leq j\leq k\leq l\leq n[/latex] и [latex]a_{i}+a_{j}+a_{k}+a_{l}[/latex] имеет наименьшее значение.

Входные данные:

[latex]n[/latex] — количество бегунов [latex](n\geq 4)[/latex].
[latex]a_{1}, a_{2},\ldots, a_{n}[/latex] — результаты спортсменов в беге на [latex]100[/latex] м.

Выходные данные:

[latex]i, j, k, l[/latex] — номера спортсменов, избранных для команды [latex](1\leq i\leq j\leq k\leq l\leq n)[/latex]

Тесты

Входные данные Выходные данные
Количество спортсменов [latex](n)[/latex] Результаты бега спортсменов Номера спортсменов, избранных для команды
1 3 2.1  3.7  1.1 [latex]n[/latex] не должно быть меньше 4
2 4 1.4  2.1  0  0.2 Результаты должны быть больше 0
3 6 6.5  4.1  1.2  8  9.1  4.9 1  2  3  6
4 12 2.5  9  14  7.1  1.3  4.9  6.7  1.9  10.01  2.45  0.01  13 5  8  10  11

Посмотреть работу программы на примере четвертого теста можно на сайте ideone.

Решение

Описание решения

Отличительной особенностью задач из категории «потоковая обработка» является то, что обработка большого объема данных происходит циклически, без их запоминания. То есть, когда пользователь вводит в программу массив значений, программа запоминает очередное значение, обрабатывает его соответствующим образом, а потом заменяет новым поступившим значением. Это дает преимущество в использовании памяти перед программами, которые запоминают весь массив целиком.

Так как по условию размер отбираемой команды — [latex]4[/latex] бегуна ( final int teamSize = 4;), введем ограничение на количество бегунов в целом — их должно быть [latex]4[/latex] или больше, иначе программа выдаст сообщение об ошибке и завершит работу.

Введя количество бегунов n, пользователь после этого будет вводить результат каждого. Программа запоминает этот результат ровно на один шаг цикла ( double a = in.nextDouble();), за который разберется, что с ним делать, а затем заменит следующим результатом.

Так как программа не запоминает весь массив целиком, найти [latex]4[/latex] наименьших значения перебором не получится. Поэтому инициализируем [latex]2[/latex] массива, один из которых ( double[] resRun = new double[teamSize];) будет хранить результаты бегунов, отобранных в команду, а другой ( int[] nRun = new int[teamSize];) — их номера.

Результаты бегунов, отобранных в команду изначально равны нулю; это говорит о том, что еще ни один бегун в команду отобран не был. Результаты и номера первых [latex]4[/latex] бегунов мы запомним в этих массивах, так как иначе мы просто потеряем эти данные и больше не сможем сравнить их со следующими. Теперь, когда 4 бегуна отобраны, следует найти номер бегуна с наихудшим результатом (с помощью функции public static int FindMax(double[] resRun, int[] nRun)). Этот бегун — первый в очереди на замену, если очередной полученный результат вдруг окажется лучшим (меньшим). Следует отметить, что программа будет искать номер наихудшего бегуна лишь в тех случаях, когда этот бегун будет заменен; в ином случае, когда результат очередного бегуна хуже, мы замены в команде не производим, соответственно, худший бегун в команде остается тем же.

Таким образом, с каждым шагом цикла результаты отобранных в команду бегунов становятся либо меньше, либо остаются прежними. После обработки последнего введенного результата, мы получим массив resRun лучших результатов и массив nRun номеров этих бегунов. Остается лишь отсортировать номера бегунов ( Arrays.sort(nRun);), как того требует условие, и вывести их значения.

MS2. Сумма чисел в потоке

Условие задачи

Сосчитать сумму чисел во входном потоке.

Тесты

Входные данные: поток чисел

Выходные данные: сумма чисел в потоке

Входные данные Выходные данные
1 1 2 4 7.0
2 0 0 0 -3 -3.0
3 12.4 25.545 37.945
4 -4.34 3.764 2.3 1.724

Код

Код доступен на ideone

Пояснение

В начале программы обьявим переменные типа doublex  для хранения текущего значения и  sum  для хранения суммы, проинициализированную числом 0. Сумма будет аккумулироваться в переменной  sum путем последовательного сложения значения этой переменной со значением текущего элемента до тех пор, пока в потоке имеется значение, что проверяется с помощью метода  hasNext()  класса  Scanner. Результат работы программы — вывод значения переменной sum.

 

 

А136в

Задача

Даны натуральное число [latex]n[/latex], действительные числа [latex]a_1,\ldots, a_n[/latex]. Вычислить: [latex]|a_1|+\ldots+|a_n|[/latex].

Тесты

     n [latex]a_1,\ldots, a_n[/latex] Результат
 1      3   3.31  -2.11   8.21     13.63
 2      6  -12.1  -2.56  9  5  -2  4     34.66
 3      2    -3.65  -3.11      6.76

Решение

Проверить работу кода можно в облаке по ссылке — Ideone.

Пояснения

С начала вводим количество элементов  [latex]n[/latex], после чего, в цикле по  i  от 1 до [latex]n[/latex] вводим элементы и суммируем их значение по модулю в переменную  sum , по выходу из цикла выводим сумму в консоль.

A153.Потоковая обработка

Условие
Даны натуральное число [latex]n[/latex], действительный числа [latex]x[/latex], [latex]a_{n}, a_{n-1}, \ldots, a_{0}[/latex]. Вычислить используя схему Горнера, значение [latex]a_{n}{x}^{n} + a_{n-1}{x}^{n-1} + \cdots + a_{0}.[/latex] [latex]a_{n}{x}^{n} + a_{n-1}{x}^{n-1} + \cdots + a_{0} = \left( \ldots \left(a_{n}{x} + a_{n-1}\right)x + \cdots + a_{1}\right)x + a_{0}.[/latex]

$latex n$ $latex x$ $latex { a }_{ n }$ $latex { a }_{ n-1 }$ $latex { a }_{ n-2 }$ $latex { a }_{ n-3 }$ $latex s$
3 2 5 4 3 2 64
2 1 3 4 7 _ 14
3 0 3 4 12 8 8
3 5 0 10 12 8 318
1 5 2 1 _ _ 11

Решение
Начинаем с коэффициента с рядом с $latex X$-ом c максимальной степенью, у нас это элемент $latex { a }_{ n }$, мы последовательно умножаем его (коэффициент) на $latex X$, а потом прибавляем следующий считанный коэффициент и сохраняем полученное значение в переменной.
Это был пример решения для$latex n$=2 , если же$latex X$ > 2 , то мы должны выполнить алгоритм для $latex n$=2, после чего $latex X$ — 2 раз умножать полученное в переменной значение на $latex X$ и прибавлять последующий элемент.

Ideone.com