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