e-olymp 4281. Невнимательность

Задача

Степан успешно прошёл собеседование и вот уже как четыре месяца работает в одной из самых престижных ИТ компаний. Пришло время сдавать проект менеджеру и Степан, как настоящий студент, всё делает в последнюю ночь перед сдачей. Набирает текст Степан необычно очень быстро, но невнимательно. Вот и в этот раз последнюю часть текста он набрал не обратив внимания, что случайно нажал клавишу [latex]caps[/latex] [latex]lock[/latex]. Таким образом большие буквы были набраны маленькими, а маленькие — большими. Другие символы он набрал верно. Степан настолько устал, что нет сил исправить ошибки, и он решил несколько часов поспать.

Помогите Степану, пока он спит, напишите программу, которая исправляет невнимательно набранный текст.

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

В одной строке содержится невнимательно набранный Степаном текст. В строке не более [latex]500[/latex] символов.

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

Вывести исправленный текст.

Тесты

Входные данные Выходные данные
[latex]sCHOOL[/latex] [latex]School[/latex]
[latex]hOME[/latex] [latex]Home[/latex]
[latex]hAPPY[/latex] [latex]nEW[/latex] [latex]yEAR[/latex] [latex]Happy[/latex] [latex]New[/latex] [latex]Year[/latex]
[latex]uNIVERSITY[/latex] [latex]University[/latex]
[latex]mERRY[/latex] [latex]cHRISTMAS[/latex] [latex]Merry[/latex] [latex]Christmas[/latex]

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

Решение задачи

Для решения задачи использовали библиотеку cctype. Вводим по одному символу до конца ввода и проверяем каким регистром написан символ c помощью функции islower(a). Меняем его на обратный ( функция toupper(a) или tolower(a) ) и выводим символ. Задача решена.

Ссылки

Условие задачи на e-olymp
Код решения на ideone.com

e-olymp 9. N-значные числа

Задача

Найти количество [latex]N[/latex]-значных чисел, у которых сумма цифр равна их произведению. Вывести наименьшее среди таких чисел для заданного [latex]N[/latex] ([latex]N < 10[/latex]).

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

Число [latex]N[/latex] не превышающее [latex]10[/latex].

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

В выходном файле через пробел вывести [latex]2[/latex] числа: количество искомых чисел и наименьшее среди них.

Тесты

Входные данные Выходные данные
[latex]1[/latex] [latex]10[/latex] [latex]0[/latex]
[latex]2[/latex] [latex]1[/latex] [latex]22[/latex]
[latex]4[/latex] [latex]12[/latex] [latex]1124[/latex]
[latex]5[/latex] [latex]40[/latex] [latex]11125[/latex]
[latex]9[/latex] [latex]144[/latex] [latex]111111129[/latex]

Код программы (Цикл)

Решение задачи (Цикл)

Для решения задачи напишем функции [latex]Sum[/latex] и [latex]Mult[/latex]. Первая считает сумму цифр [latex]N[/latex]-значного числа, а вторая — произведение цифр. С помощью цикла создаем последовательность [latex]N[/latex]-значных чисел и вводим каждое из них в функции [latex]Sum[/latex] и [latex]Mult[/latex]. Если возращаемые значения равны между собой, то мы выводим данное число и присваиваем переменной [latex]b[/latex] значение [latex]false[/latex]. Также продолжаем считать количество [latex]N[/latex]-значных чисел у которых сумма цифр равна их произведению. Также создаем случаи, когда [latex]N=1[/latex], [latex]N=8[/latex] и [latex]N=9[/latex], ибо в цикле эти значения долго считаются. Задача решена.

Код программы (Массив)

Решение задачи (Массив)

Для решения задачи заранее просчитали все ответы и записали их в массив [latex]x[/latex]. Так как ответы идут подряд составили формулу для вывода искомых значений: для количества чисел у которых сумма цифр совпадает с их произведением — [latex]2n-2[/latex], для минимального числа — [latex]2n-1[/latex]. Задача решена (также задачу можно решить с помощью циклов).

Ссылки

Условие задачи на e-olymp
Код решения на ideone.com (цикл)
Код решения на ideone.com (массив)

e-olymp 2214. Функция 9

Задача

Дана функция, аргументы которой — произвольные натуральные числа

[latex]f(M,N)=\begin{cases} f(M-N,N), & \text{ npu } M>N \\ N, & \text{ npu } M=N \\ f(N-M,M) & \text{ npu } N>M \end{cases}[/latex]

Составить алгоритм (написать программу), вычисляющий значение функции.

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

Два натуральных числа [latex]n[/latex] и [latex]m[/latex] [latex](1 \le n, m \le 10^{18})[/latex].

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

Искомое значение функции.

Тесты

Входные данные Выходные данные
[latex]6[/latex] [latex]3[/latex] [latex]3[/latex]
[latex]12[/latex] [latex]12[/latex] [latex]12[/latex]
[latex]126[/latex] [latex]98[/latex] [latex]98[/latex]
[latex]10329[/latex] [latex]1501[/latex] [latex]1501[/latex]
[latex]1008359[/latex] [latex]15113[/latex] [latex]15113[/latex]

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

Решение задачи

Для решения задачи напишем функцию [latex]f[/latex]. Именно эта функция и будет считать искомое значение. Из условия задачи видим, что для решения потребуется рекурсия. Для этого, если остаток от деления одного натурального числа на другое не равен нулю, то мы снова возращаемся в функцию (в зависимости от того,
что больше [latex]m[/latex] или [latex]n[/latex]). Это будет продолжаться до тех пор, пока остаток от деления одного натурального числа на другое не будет равен нулю (как только $n\mod m = 0$ или $m\mod n = 0$, то функция возращает в переменную [latex]t[/latex] искомое значение). Задача решена.

Ссылки

Условие задачи на e-olymp
Код решения на ideone.com

e-olymp 3609. Стартовая скорость

Задача

Кристина Стуй, Олеся Повх, Елизавета Брызгина, Мария Ремень

Женская олимпийская сборная Украины в эстафете 4×100 метров на олимпийских играх в Лондоне в составе (Кристина Стуй, Олеся Повх, Елизавета Брызгина, Мария Ремень)

Несмотря на то, что женская сборная Украины в эстафете [latex]4 \times 100[/latex] метров на олимпийских играх в Лондоне в составе Кристины Стуй, Олеси Повх, Елизаветы Брызгиной и Марии Ремень выступила очень достойно и завоевала бронзовые медали, подобная мысль назойливо мучила и программиста Васю.

Как показали тщательные экспериментальные проверки, модель, построенная им в задаче «Крейсерская скорость» оказалась не совсем точной. Многочасовые наблюдения, проведённые им на тренировках как украинских спортсменок, так и спринтеров из других стран, показали, что некоторые спортсмены во время старта разгоняются, а некоторые притормаживают. Но всё равно, после [latex]25[/latex] стартовых метров дистанции они движутся далее равномерно.

Феномен с «притормаживанием» Васе удалось с точки зрения физики пояснить довольно просто. Во время старта каждый из спортсменов имеет некоторую стартовую скорость, приобретённую в результате мощного отталкивания от стартовых колодок. Эта скорость может быть либо меньше «крейсерской», либо больше. В первом случае спортсмену нужно работать над наращиванием мышц ног для увеличения силы отталкивания. Во втором – мышцы уже наращены, но в результате того, что сила сопротивления воздуха зависит от площади соприкосновения тела спортсмена с ним, во время распрямления спортсмена во время старта эта сила сопротивления возрастает и становится постоянной только после указанных выше [latex]25[/latex] стартовых метров дистанции.

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

Ваша задача помочь в этом Васе, считая, что на первых [latex]25[/latex] метрах дистанции движение легкоатлета является равноускоренным, независимо от того, ускоряется он или замедляется.

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

В единственной строке задано [latex]2[/latex] вещественных числа, разделённых единичным пробелом, соответственно результат спортсмена на дистанциях [latex]100[/latex] и [latex]200[/latex] метров.

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

В единственной строке выведите стартовую скорость спортсмена с точностью не менее [latex]6[/latex]-ти знаков после запятой.

Тесты

Входные данные Выходные данные
[latex]9.63[/latex] [latex]19.32[/latex] [latex]10.844104[/latex]
[latex]9.77[/latex] [latex]19.59[/latex] [latex]10.606721[/latex]
[latex]9.69[/latex] [latex]19.40[/latex] [latex]10.469771[/latex]
[latex]10.02[/latex] [latex]20.12[/latex] [latex]10.548908[/latex]
[latex]9.88[/latex] [latex]19.85[/latex] [latex]10.781564[/latex]

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

Решение задачи

Со школы знаем формулу скорости, [latex]v=\frac{l}{t}[/latex]. Найдем из неё [latex]l=vt[/latex].
Пусть [latex]l_1[/latex] и [latex]l_2[/latex] — это расстояния, на которых спортсмен бежит с «крейсерской» скоростью соотвественно на дистанциях в [latex]100[/latex] и [latex]200[/latex] метров, где [latex]l_1=l-l_p[/latex], где [latex]l[/latex] — это длина дистанции, а [latex]l_p[/latex] — длина разгона (известно из условия задачи). Аналогично для [latex]l_2[/latex]. Заменим [latex]t[/latex] на [latex]t_1-t_p[/latex], где [latex]t_1[/latex] — время, за которое спортсмен пробегает всю дистанцию, а [latex]t_p[/latex] — время разгона на первых [latex]25[/latex]-ти метрах дистанции. Получаем формулы: [latex]l_1=v(t_1-t_p)[/latex] и [latex]l_2=v(t_2-t_p)[/latex]. Из отношения этих формул [latex]\frac {l_1}{l_2}=\frac {v(t_1-t_p)}{v(t_2-t_p)}[/latex], найдем [latex]t_p[/latex]. Имеем [latex]t_p=\frac{l_1t_2-l_2t_1}{l_2-l_1}[/latex]. Подставляем [latex]l_1=v(t_1-t_p)[/latex]. Находим «крейсерскую» скорость спортсмена, [latex]v=\frac{l_1}{t_1-t_p}[/latex]. Из уравнения равноускоренного движения
[latex]x=v_0t \times \frac{at^2}{2}[/latex], где [latex]x=25[/latex] метров (длина разгона). Находим [latex]v_0[/latex] — это и есть стартовая скорость спортсмена. Для этого заменим [latex]a[/latex] на [latex]\frac{v-v_0}{t_p}[/latex]. Приводим подобные и выражаем [latex]v_0[/latex]. В итоге получаем формулу стартовой скорости спортсмена, [latex]v_0=\frac{50-vt_p}{t_p}[/latex]. Задача решена.

Ссылки

Условие задачи на e-olymp
Код решения на ideone.com