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. Средняя зарплата считается по формуле среднего арифметического: x = \frac{total}{sum} и выводится потоком вывода.

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

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

 

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

Задача

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

Тесты

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

Решение

Задача(2)

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

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

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

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

Тесты

Входной поток чисел Корни уравнений
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

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

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

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

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

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

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

Тесты

Входные данные Выходные данные
Количество спортсменов (n) Результаты бега спортсменов Номера спортсменов, избранных для команды
1 3 2.1  3.7  1.1 n не должно быть меньше 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.

Решение

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

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

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

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

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

Результаты бегунов, отобранных в команду изначально равны нулю; это говорит о том, что еще ни один бегун в команду отобран не был. Результаты и номера первых 4 бегунов мы запомним в этих массивах, так как иначе мы просто потеряем эти данные и больше не сможем сравнить их со следующими. Теперь, когда 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в

Задача

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

Тесты

     n a_1,\ldots, a_n Результат
 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.

Пояснения

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

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

Условие
Даны натуральное число n, действительный числа x, a_{n}, a_{n-1}, \ldots, a_{0}. Вычислить используя схему Горнера, значение a_{n}{x}^{n} + a_{n-1}{x}^{n-1} + \cdots + a_{0}. 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}.

n x { a }_{ n } { a }_{ n-1 } { a }_{ n-2 } { a }_{ n-3 } 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

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

Ideone.com

А136з

Задача Вычислить:  Реализовать формулу, x+=[знак который зависит от четности/нечетности определяется отдельно для каждого элемента массива]*[соответствующий элемент массива]/[факториал текущего номера элемента массива].

Тест

n последовательность sum(wolframalpha)
2 0 0 0
2 5 8 -1
3 5 8 12 -3
4 1 2 3 24  1
 5  0 0 0 2 3  0, 058333

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

 

Решение:
В этой задаче главное правильно расставить знаки, так  как  это повлияет на результат.Поэтому мы заводим переменную sign, которая будет следить за знаком. Далее проверяем  чётность, если элемент делиться на 2 без остатка, то он получает знак +

Ссылка на Ideone

http://ideone.com/ZB6a2C

А136е

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

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

Даны натуральное число n и действительные числа a_{1}, a_{2}, \ldots, a_{n}

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

Вычислить a_{1}+a_{2}+\cdots+a_{n} и a_{1}a_{2}\cdots a_{n}.

Код

Тесты

n a_{1}, a_{2}, \cdots, a_{n} s p
2 3 4 7 12
4 1 3 5 7 16 105
6 2 2 3 3 4 4 18 576
1 9 9 9

 

Решение

В программе задаем число n— количество элементов сумм и произведения и a— элементы сумм и произведения;  n и a вводим с клавиатуры. В цикле находим сумму и произведение.

http://ideone.com

А136и

Задача: Даны натуральное число n, действительные числа k_{1}, k_{2}, \dots, k_{n} Вычислить \frac{k_{1}}{0!} + \frac{k_{2}}{1!} + \dots + \frac{k_{n}}{(n-1!)}

Тесты

Число-n Действительные числа Результат
5 4 5 6 7 8 13,5
7 5 4 7 9 2 8 3 14,1542
3 6 9 3 16,5

Код:

Решение:

  1. Вводим n, k (действительные числа);
  2. Получаем очередное действительное число k.
  3. Делим на факториал и суммируем;

Решение на Ideone