Ю4.35

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

Совместная работа. Известно время $latex t_1,t_2,\cdots,t_n$, за которое некоторую работу может выполнить каждый из $latex n$ рабочих бригады, работая в одиночку. Сколько времени понадобится бригаде на выполнение этой работы, если они будут работать совместно (и при этом никто из них не «сачкует»)?

Тесты

Количество рабочих n. Время t каждого рабочего, требуемое для выполнения некоторой работы.  Время совместной работы.
3 5 7 9 2.2
4 7 9 11 23 2.6
4 1 2 3 4 0.5
5 3 1 5 2 3 0.4

 

Код

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

В данной задаче нам нужно найти время, за которое n рабочих выполнят какую-то совместную работу. В задаче не указан  общий объём выполняемой работы, по-этому зададим его как 1. Время совместной работы находят по формуле: $latex \frac{1}{\frac{1}{t_1}+\frac{1}{t_2}+\cdots+\frac{1}{t_n}}$.

В программе используем один цикл for в котором задаем значение переменной workingTime и суммируем объем выполняемой работы за час для каждого шага цикла (для каждого рабочего). После завершения цикла получаем объем работы выполняемой всеми работниками вместе за час. Делим общий объем работы на объем работы за час и получаем искомую величину.

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

e-olymp 906

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

Найдите сумму цифр в десятичной записи целого числа.

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

Целое десятичное число — [latex]x[/latex].

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

Сумма цифр десятичного числа — [latex]sum[/latex].

Тесты

Входные данные Выходные данные
1 234 9
2 489 21
3 31 4

Решение:

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

Объявляем две переменные типа  int —  x  и  sum . Вводим с клавиатуры целое десятичное число  x . Используя цикл  while добавляем в  sum остаток от деления  x  на 10 до тех пор, пока остаток от деления не станет равным нулю. Выводим значение  sum на экран с помощью функции  System.out.println() .

 

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.

 

 

D2574. Сумма ряда

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

Найти сумму сходящегося ряда $latex \sum\limits_{i=1}^n \frac{\sin ix}{2^i}.$

Тесты

Входные данные: $latex n$ — количество шагов, $latex x$ — значение $latex x.$

Выходные данные: сумма ряда $latex \sum\limits_{i=1}^n \frac{\sin ix}{2^i}.$

Входные данные Выходные данные Тесты на WolframAlpha
1 10 0.523598 0.6511697 Тест 1
2 5 1.141592 0.5300871 Тест 2
3 15 1.570796 0.399994 Тест 3
4 10 -2.3 -0.1944212  Тест 4

Код

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

Пояснение

В начале программы объявим переменные типа  intn для хранения шагов и  powOf2, проинициализированную числом 1, так как в ней будет храниться текущая степень числа 2, полученная путем последовательного умножения значения данной переменной на 2; и переменные типа  doublex для хранения значения $latex x$ и  sum для хранения суммы, проинициализированную числом 0. Проинициализируем переменные  n  и  x  значениями из стандартного потока ввода. Сумма вычисляется в цикле и аккумулируется в переменной  sum , используя стандартную функцию вычисления синуса  Math.sin() и значение переменной  powOf2. Результат работы программы — вывод значения переменной 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 , по выходу из цикла выводим сумму в консоль.

A334(а). Вложенная сумма

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

Вычислить: [latex]\sum \limits_{i=1}^{m}\sum \limits_{j=1}^{n}\frac{1}{i+j^2}[/latex], где [latex]m[/latex] и [latex]n[/latex] — вводимые числа.

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

[latex]m[/latex] и [latex]n[/latex] — верхние границы сумм.

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

Результат вычисления выражения.

Тесты

Входные данные Выходные данные
1 1     5 0.8972
2 19     3 5.3469
3 164     395 34.7509
4 0     102 0

Результаты тестов на wolframalpha.com:

  1. Тест 1
  2. Тест 2
  3. Тест 3
  4. Тест 4

Решение

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

Так как необходимо найти вложенную сумму, будем использовать вложенный цикл (цикл внутри цикла). На каждом шаге внутреннего цикла прибавляем к сумме (которая изначально равна 0) результат выражения [latex]1/(i + j^2)[/latex]. В числителе вместо 1 пишем 1.0, что преобразует результат выражения в тип double, так как результат выражения — число вещественное.

Посмотреть, как работает программа со входными данными 164 395 можно на сайте ideone.

Ю4.24

  «Нарастающий итог»

Задача:

В массиве А(n) каждый элемент, кроме первого, заменить суммой всех предыдущих элементов.

 
Вводимые данные Предполагаемый вывод Комментарий
1 1 1 1 1 1 1 1 2 3 4 5 Тест пройден
1 2 3 4 5 6 7 8 9 1 1 3 6 10 15 21 28 36 Тест пройден
3 5 2 9 0 4 65 156 1 3 3 8 10 19 19 23 88 244 Тест пройден
2 -7 3 8 -4 5 -2 4 2 2 2 -5 -2 6 2 7 5 9 Тест пройден

Исходный код:

Описание:

Если действовать в лоб (последовательно менять значения элементов от первого до последнего на сумму предыдущих) можно получить различные геометрические прогрессии и даже, в некоторых случаях, последовательность Фибаначчи(так как мы меняем предшествующие элементы, и, при обычном подходе нет эффективного способа их запоминать). Подумав некоторое время над этой  проблемой, и осознав бесперспективность своих действий, решил зайти с другой стороны. Да, я не могу менять элементы в начале массива, но я могу менять их в конце, т. к. они не влияют на вычисления. Для этого пришлось создать новый цикл, в котором мы находим сумму всех элементов массива кроме последнего, величина которого (массива) уменьшается с каждым шагом. Далее, в главном цикле, мы последовательно присваиваем элементам массива найденные суммы. И уже после цикла присваиваем нулевому элементу значение первого.

Ссылка на Ideone

http://ideone.com/Wj86C6

А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

A278

Задача A278

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

Даны натуральные числа n_{1},\dots,n_{m}, действительные числа x_{1},\dots,x_{m}. Вычислить \frac{n_{1}\cdot x_{1}+\dots+n_{m}\cdot x_{m}}{n_{1}+\dots+n_{m}}.

Тестирование

Входные данные Выходные данные
1. 1 2 4 -1 -0.4
2. 1 2 3 4 5 0.6 1.88889
3. 5 -2 1 0.2 3 -3 2 0 -1.70909
4. 10 3.3 4 0.4 6 0.01 8 1 1 8 1.7469
5. 3 -0.5 2 -0.4 1 -0.3 5 32 11 5 20 -1 4.58095

 

Код

Алгоритм решения (потоковая обработка)

Считываем числа до конца входного потока и поочередно записываем их в переменные n и n соответственно.
Пока вводятся данные:

  1. Вычисляем значение выражения n_1\cdot x_1+\dots+n_m\cdot x_m, накапливая сумму в числитель n.
  2. Вычисляем значение выражения n_1+\dots+n_m, накапливая сумму  в делителе n.
  3. Находим результат n от деления n на  n

Код на ideone.com