Task 85. Незаконченная формула

Task 85. Незаконченная формула

UniLecs

Задача: дано выражение вида _ 1 _ 2 _ ... _ n = k

На месте символов нижнего подчеркивания должны стоять знаки + или -, так чтобы получилось верное равенство. Необходимо для заданного k найти минимально возможное n, для ктр существует указанная формула. 

Входные данные: k - целое число.

Вывод: минимально возможное число n (n >= 1), при ктр существует формула.

Пример

1. k = 2 -> n = 3; 1 - 2 + 3 = 2

2. k = 12 -> n = 7;  -1 + 2 + 3 + 4 + 5 + 6 - 7 = 12

Идея: рассмотрим случай для k >= 0. Тогда, ищем минимальное n, для ктр 1+2+...+n >= k. 

Если в сумме S = 1 + 2 + … + n перед любым из слагаемых поставить минус, четность суммы при этом не изменится. Этот вывод делается на основе свойств четности/нечетности целых чисел.

Подробнее вы можете посмотреть здесь:

Свойства четности и нечетности чисел

Сумма S - арифмитическая прогрессия, поэтому сформируем уравнение: (1+n)*n/2 = k. Приведем уравнение к квадратному: n^2 + n - 2k = 0.

Решив квадратное уравнение, получим его положительный корень, округленный вверх:

n1 = (-1 + Math.Sqrt(1 + 8k)) / 2.

Так как мы округлили значение, нам нужно определить точное решение, будем увличивать n1 на единицу, пока четность суммы 1+2+...+n и четность k не совпадут.

Реализация:

реализация на C#

https://gist.github.com/unilecs/449334565d2fd728a0de3d92c775ae3e


Тест:

https://dotnetfiddle.net/Q32IBF

Report Page