e-olymp 2. Цифры

Задача

Вычислить количество цифр целого неотрицательного числа $n$.

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

Одно целое неотрицательное число $n$ [latex](0 \ge n \ge 2\cdot10^9)[/latex].

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

Количество цифр в числе $n$.

Тесты

Входные данные Выходные данные
12345 5
1 1
353628 6
5454 4
0 1

Код программы (с использованием условных операторов)

 

Код программы (без использования условных операторов)

Решение

Для первого решения задачи используем череду условных операторов ( ifelse), сравнивая $n$ с концами промежутков чисел с соответствующим количеством цифр. Обойтись без них можно, задав переменную  string, присвоив ей значение числа $n$ и используя функцию  length()в выводе (перед этим подключив библиотеку  string).

Ссылки

E-Olymp

Ideone (с условными операторами)

Ideone (без условных операторов)

e-olymp 8531. Делимость на числа

Задача

Задано натуральное число [latex]n.[/latex] Делится ли оно одновременно на [latex] a\ [/latex] и на [latex] b?[/latex]?

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

Три натуральных числа [latex] n, a, b,[/latex] не больших [latex] 10^{9}.[/latex]

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

Выведите «YES» если [latex] n\ [/latex] делится одновременно на [latex] a\ [/latex] и на [latex] b\ [/latex]. Выведите «NO» иначе.

Тесты

Ввод Вывод
1 12 4 6 YES
2 10 5 6 NO
3 1056 22 6 YES
4 98 103 5 NO

Решение

Проверим делимость [latex] n\ [/latex] на [latex] a\ [/latex] и [latex] b.[/latex] Число $n$ делится одновременно на $a$ и $b$ тогда, когда и остаток от деления $n$ на $a$ равен $0$ ( n % a == 0), и остаток от деления $n$ на $b$ равен $0$ ( n % b == 0).

Код с ветвлением

Код без использования ветвления

 

Ссылки

e-olymp 7401. Друзья Степана

Задача

Степан вернулся с международной олимпиады школьников по программированию (ИОИ) и привез с собой $n$ разноцветных камней в качестве сувениров. Степан вовсе не жадный мальчик, поэтому решил поделиться камнями со своими друзьями. Каждому другу Степан отдал ровно один камень. Оказалось, что у самого Степана остался тоже только один камень. Определите, сколько же у него друзей.

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

Одно число $n$ (1 ≤ $n$ ≤ 100).

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

Выведите одно число — количество друзей Степана.

Пояснение к примеру

Степан привёз 2 камня, один из которых остался у него. Значит, второй камень Степан отдал своему единственному другу.

Тесты

Входные данные Выходные данные
2 1
3 2
6 5
50 49
100 99

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

Решение

Известно, что Степан разделил камни между своими друзьями таким образом, что каждому из друзей досталось по 1 камню, и 1 камень остался. Значит количество камней при делении на количество друзей равно единице с единицей в остатке, из чего следует, что количество друзей разнится от количества камней на единицу, то есть — равно $n-1$.

Ссылки

e-olymp

https://ideone.com

e-olymp 6275. Удвоение

Задача

Удвоить каждую цифру заданного трицифрового числа.

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

Трицифровое целое число.

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

Ответ к задаче.

Тесты

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 123 112233
2 564 556644
3 124 112244
4 100 110000
5 202 220022

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

Решение

Задаём трёхзначное число  n с помощью оператора  cin. Разобьём его на цифры, которые сохраним в переменных  ab и  c.  Тогда для эффекта удвоения цифр числа выведем сумму произведений этих цифр с числами, соответствующих им разрядам, также удвоенными поцифрово (1 → 11, 10 → 1100, 100 → 110000).

Ссылки

e-olymp

ideone.com

e-olymp 421. Йо-йо

Задача

Игрушка йо-йо состоит из катушки, на которую намотана нитка. Если, держа за конец нитки, отпустить катушку, то она будет, вращаясь, сначала опускаться вниз, а затем по инерции подниматься вверх. Но высота, на которую катушка поднимется, будет в $k$ раз меньше, чем высота, с которой она опустилась. Будем считать, что катушка остановилась, если высота её очередного подъема не превышает $1$.

Напишите программу, которая по длине нитки $l$ и коэффициенту $k$ считает количество подъемов катушки до остановки. Например, пусть $l = 17$ и $k = 2$, тогда катушка будет подниматься на высоты $8.5$, $4.25$, $2.1254$, $1.0625$, а затем остановится. Таким образом получится $4$ подъема.

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

Два целых числа $l (1 ≤ l ≤$ 109$)$ и $k (2 ≤ k ≤ 100)$.

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

Вывести одно число – количество подъемов.

Тесты

Ввод Вывод
1 17 2 4
2 4 2 1
3 135 9 2
4 1 2 0
5 1000000000 100 4

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

Решение

Для решения данной задачи достаточно найти максимальную степень $k$, которая будет меньше числа $l$. Значение показателя степени и будет количеством подъемов йо-йо. Ответ найдем с помощью логарифма, подключив библиотеку <cmath>. Используем формулу перехода логарифма к новому основанию, а каким будет это основание значения не имеет. Заметим, что нас интересует только целая часть логарифма — число подъемов.

Также необходимо учесть, что кaтушка остановится в случае, если высота её очередного подъема будет меньше либо равна $1$. Это означает, что, если $l$ будет степенью $k$, полученный с помощью логарифма ответ будет на единицу больше верного. Введем очень маленькую константу с для разрешения этой проблемы. На ответ она особо не повлияет, а вот от единицы поможет избавиться.

Ссылки

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

Задача 421 на e-olymp

e-olymp 8520. Условный оператор — 1

Условие

Вычислите значение $ y $ в соответствии со следующим условием:

[latex] y=\begin{cases}x^{2} — 3x +4 , x<5\\x + 7 , x\geq 5\end{cases} [/latex]

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

Одно целое число [latex] x (-1000\leq x\leq 1000) [/latex].

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

Выведите значение $ y $ в соответствии с заданным условием.

Тесты

входные данные выходные данные
 1             2             2
 2             10             17
 3             15             22
 4             32             39

Решение

Решение этой задачи довольно простое. Мне потребовалось создать условие, где если $ x $ меньше пяти, то [latex]y=x^{2}-3x+4 [/latex] , а для  $ x $ больше или равняется пяти [latex]y=x+7 .[/latex]

e-olymp
ideone.com

Без условного оператора :

Решение I

Используем логический оператор $ && $ так как он не вычисляет второе условие, если первое ложно.

ideone.com

Решение II

Для вычисления используется тернарный оператор который проверяет условие и выполняет действие [latex]y=x^{2}-3x+4 [/latex] если условие вернет истину (true) или С если условие возвращает ложь (false).

ideone.com

Решение III

В этом решении используется оператор множественного выбора switch, который сравнивает $ x $ со значением заложенным в  case, а после выполняет действие [latex]y=x^{2}-3x+4 [/latex]. Если значения не совпадают, тогда выполняется [latex]y=x^{2}-3x+4 [/latex].

ideone.com

e-olymp 8372. Составить треугольник

Задача взята с сайта e-olymp

Задача

По заданным длинам трех отрезков определить, можно ли из них составить невырожденный треугольник. Треугольник называется невырожденным, если его площадь больше 0.

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

Три натуральных числа $a, b, c (1 ≤ a, b, c ≤ 1000)$ — длины трех отрезков.

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

Вывести YES если из отрезков можно составить невырожденный треугольник и NO в противном случае.

Тесты

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 5 6 7 YES
2 3 7 4 NO
3 16 24 32 YES
4 54 1 100 NO
5 1 1 1 YES

Код программы (Ветвление)

Код программы (Линейные вычисления)

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

Пусть $a, b, c$ – длины трех отрезков. Из них можно составить невырожденный треугольник, если длина каждых двух отрезков больше длины третьего (это условие известно как неравенство треугольника): | $b$ | < | $a$ | + | $c$ | \begin{cases} b + c > a\\a + c > b\\a + b > c\end{cases}

Ссылки

Условие задачи на e-olymp

Код программы на ideone (Линейные вычисления)

Код программы на ideone (Ветвление)

e-olymp 3867. Ленивый Мишка

Задача. Ленивый Мишка

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

  • На мытье посуды уйдет [latex]t_1[/latex] секунд
  • Пропылесосить квартиру можно за [latex]t_2[/latex] секунд
  • Процесс игры с Маринкой займет [latex]t_3[/latex] секунд

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

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

Три целых числа [latex]t_1[/latex], [latex]t_2[/latex], [latex]t_3[/latex] ([latex]1 ≤ t_1, t_2, t_3 ≤ 1000[/latex]).

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

Вывести минимальное время, которое потребуется Мишке для выполнения маминого задания.

Тесты

Ввод Вывод
1 1 7 2 1
2 100 45 1 1
3 66 9 888 9
4 5 800 4 4
5 25 46 25 25
6 13 10 12 10
7 999 995 1000 995

Решение 1

Мишка выбирает мамино поручение, что занимает наименьшее количество времени. Нам дано время за которое Мишка выполнит данные поручения. Найдём из них наименьшее и выведем на экран. Воспользуемся функцией int min (int, int); из библиотеки cmath.

Код 1

Решение 2

Для нахождения минимума трёх чисел заведём переменную min и воспользуемся логическим ветвлением.

Код 2

Ссылки

Первое решение

Второе решение

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

Компиляция первого решения

Компиляция второго решения

e-olymp 4718. Привет, Гарри!

Задача взята с сайта e-olymp

Задача

Напишите программу, которая приветствует пользователя, выводя слово Hello, имя пользователя и знаки препинания в следующем виде: Hello, Harry

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

В единственной строке вводится имя пользователя.

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

В первой строке выведите приветствие.

Тесты

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 Harry Hello, Harry
2 Peter Hello, Peter
3 Emily Hello, Emily
4 Anna-Maria Hello, Anna-Maria
5 Zhao Yun Hello, Zhao Yun

Код

Решение

Для того, чтобы задать переменную-строку, воспользуемся библиотекой string. Далее, введём переменную, к примеру name (имя). В строке вывода зададим неизменную часть фразы Hello, и саму переменную.

Ссылки

ideone
e-olymp

e-olymp-248. Юный садовод

Задача Юный садовод

Условие

Мама попросила Васю полить все молодые деревца в саду. Вася знает, что пока деревья маленькие, их надо очень хорошо поливать. А вот сколько поливать — неизвестно. Но Вася — очень умный мальчик. Он внимательно прочитал весь учебник ботаники для средней школы и выяснил, что полив прямо пропорционален количеству листьев на дереве. Для хорошего роста деревьев достаточно выливать под дерево ежедневно по одному литру воды на каждый лист.prb248

К счастью Васи оказалось, что листья на деревьях растут ярусами, причем на верхнем ярусе два листа, на втором — четыре, на следующем — шесть, и так далее, на каждом последующем ярусе на два листа больше по сравнению с предыдущим. А на самой верхушке растет еще один листик. Хитрый Вася послал младшую сестренку Машеньку подсчитать количество ярусов на каждом дереве, а Вас просит написать программу, которая для каждого дерева вычислит количество литров воды для его полива.

 

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

Количество ярусов [latex] n(0≤n≤1000)[/latex]  на дереве.

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

Вывести количество литров воды для полива этого дерева.

Тесты

Входные данные Выходные данные
1. 10 111
2. 0 1
3. 5 31
4. 123 15253

Линейное вычисление

Решение

Что бы решить эту задачу, необходимо найти сумму арифметической прогрессии, где [latex]  a_1=2[/latex] и   [latex] d=2 [/latex] и добавить к ней единицу (лист с верхушки).  Для этого можно воспользоваться формулой суммы арифметической прогрессии $S_n=\frac{2a_1+d(n-1)}{2}n$

Ссылки

Ссылка на e-olymp

Ссылка на ideone

e-olymp 939. Квадрат суммы

Задача взята с сайта e-olimp.

Задача

Найти квадрат суммы цифр двузначного натурального числа.

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

Одно натуральное двузначное число.

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

Квадрат суммы цифр заданного числа.

Тесты

#

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

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

1

23

25

2

25

49

3

36

81

4

60

36

5

99

324

Код

Решение

Разобьем двузначное натуральное число [latex] n [/latex]  на два числа, содержащих соответственно его первую цифру  ( [latex] c_1 [/latex] ) и вторую — ( [latex] c_2 [/latex] ), где  [latex] c_2 = n \mod 10[/latex], в то время как [latex] c_1 = \frac {n} {10} [/latex]. Теперь, чтобы получить квадрат суммы цифр двузначного натурального числа, сложим два эти числа и умножим еще раз на их сумму [latex] (c_2 + c_1) \cdot (c_2 + c_1) [/latex].

Ссылки

ideone

e-olymp

e-olymp 4716. Делёж яблок — 1

Задача: 
[latex]n[/latex] школьников делят [latex]k[/latex] яблок поровну, неделящийся остаток остаётся в корзинке. Сколько яблок достанется каждому школьнику?

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

Два положительных целых числа [latex]n[/latex] и [latex]k[/latex], не превышающие [latex]1500[/latex] — редко в школе бывает больше учеников, да и много яблок тоже кушать вредно…

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

Вывести количество яблок, которое достанется каждому школьнику.

Тесты:

Входные данные Выходные данные
3;14 4
10;100 10
20;20 1
1500;1500 1
120;1500 12


Решение:

Объяснение:

Поскольку все числа, используемые в задаче,— целые, и каждое из них меньше [latex]1500 [/latex] то переменные создаём типа «int». Далее разделив число яблок ([latex]k [/latex]) на количество школьников ([latex]n [/latex]), получаем количество яблок, которое получит каждый школьник. Формула, соответственно, [latex]\frac{k}{n} [/latex]. Остаток от деления в решении не учитывается, что соответствует условию, ведь он остаётся в корзине.

e-olymp

ideone

e-olymp 1610. Зайцы в клетках

Задача взята с сайта e-olymp

Задача

Всем известен, так называемый, принцип Дирихле, который формулируется следующим образом:

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

В данной задаче мы рассмотрим более общий случай этого классического математического факта. Пусть имеется [latex]n[/latex] клеток и [latex]m[/latex] зайцев, которых рассадили по этим клеткам. Вам требуется расcчитать максимальное количество зайцев, которое гарантированно окажется в одной клетке.

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

В одной строке заданы два натуральных числа [latex]n[/latex] и [latex]m[/latex] (1[latex]n[/latex], [latex]m[/latex] ≤ [latex]\ 10^{9}[/latex]).

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

Максимальное количество зайцев, которое гарантированно окажется в одной клетке.

Тесты

# Входные данные Выходные данные
1 3 4 2
2 15 144 10
3 1 7 7
4 100 123456 1235
5 222 222 1

Код

Решение

Распределяя всех [latex] m [/latex] зайцев равномерно по клеткам [latex] n [/latex] получаем что максимальное количество зайцев в одной клетке равно [latex]\lceil \frac{m}{n}\rceil[/latex]

Ссылки

ideone
e-olymp

И опять «низкая» таблица

Задача

В тридевятом государстве новое соревнование. Организаторы поняли, что предыдущая задача «Низкая таблица» была слишком простой и решили усложнить жизнь нашей Аленушке. Она совсем растерялась и снова умоляет Вас о помощи. Итак, вот новое условие: каждому участнику дается лист бумаги, ширина которого строго равна одному магическому метру, на котором надо начертить таблицу, состоящую из $n$ строк и $n$ столбцов. В каждой строке и столбце выбрано по одной ячейке, для которой указана минимальная площадь, которую должна занимать эта ячейка — $S_i$ для ячейки, расположенной в $i$-ой строке. Остальные могут иметь площадь $0.$ Задача участников аналогична предыдущей — начертить таблицу наименьшей высоты.

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

В первой строке содержится единственное натуральное число $n \leqslant 20.$
Во второй строке содержатся $n$ натуральных чисел $S_{1}, \ldots, S_{n}$, не превышающие $10^{4}.$

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

Минимальная высота таблицы в магических миллиметрах, округленная до ближайшего меньшего целого.

Тесты

Входные данные Выходные данные
3
1 2 3
17191
19
2899 338 8846 5896 3325 9199 6493 211 7878 6083 2074 8493 2889 3743 133 5725 9453 7890 3594
1548340398
18
3823 5708 1356 9979 8801 5310 2123 4575 566 5039 9367 26 1966 6540 1514 7193 7667 994
1252560358
8
8283 8769 3568 869 8285 4494 7185 4519
340953967
9
6375 3059 6206 4221 6027 2064 6278 1347 996
301905233
17
2765 8226 4472 1139 9080 675 3712 7735 9566 223 8899 9716 6594 9631 8871 6176 313
1414903854
10
2654 7458 2284 8767 6061 1149 7243 607 757 8532
385237635
6
6429 9121 9490 7035 6352 2021
231968881
8
52 6380 8169 5689 367 2403 3112 2850
185108459
2
8063 3128
21235115
9
9226 7811 4279 68 5976 1418 9721 6784 8580
418145363
13
8987 3714 247 679 1416 3489 1501 7654 2164 9101 7347 4043 3289
591377417
18
9349 9854 4308 1799 1501 8647 6300 9379 1123 7369 1164 3083 1207 2754 2933 1051 8566 4016
1324052855
3
1311 2984 9564
35581065
16
3460 6135 8911 5656 5496 5463 9566 8473 7575 7444 2717 8241 9868 6698 849 7118
1576424119
15
2264 4988 4454 726 17 9279 422 7916 698 5780 2517 9352 6291 2954 4775
763779068
10
3625 7189 773 7283 2952 7865 588 1670 1013 2982
305484098
18
2741 2630 4163 4926 9431 2212 6978 1607 9489 6746 4947 3333 3144 4809 3352 207 1919 1918
1207862952
5
4320 8413 1175 4527 1519
88794894
6
9534 5380 2500 683 4281 4803
145815522
14
1458 1341 6248 8840 8877 6891 409 5853 6726 6401 4932 9007 5710 745
905996755

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

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

Поменяем местами строки таблицы так, чтобы ячейки, для которых указана минимальная площадь, лежали на главной диагонали. От этого не изменится ни ширина, ни высота таблицы. Обозначим эти ячейки $S_{ii}$ для ячейки, лежащей на пересечении $i$-ой строки и $i$-ого столбца.
Докажем, что минимальная площадь указанной в условии таблицы $S = \left (\sqrt{S_{11}} + \sqrt{S_{22}} + \ldots + \sqrt{S_{nn}} \right )^2.$ Воспользуемся методом математической индукции.
База индукции. Случай при $n=2$ был доказан здесь.
Предположение индукции. Пусть утверждение верно $\forall n \leq k, \ k \geq 2.$
Шаг индукции. Докажем, что утверждение верно для $n = k+1.$ Рассмотрим подтаблицу $T_1$ нашей таблицы $T$, которая состоит из первых $k$ столбцов и $k$ строк исходной таблицы. По предположени индукции ее минимальная площадь $S_{T_1} = \left (\sqrt{S_{11}} + \sqrt{S_{22}} + \ldots + \sqrt{S_{kk}} \right )^2.$ Теперь можем рассматривать таблицу $T$ как таблицу, состоящую из двух строк и двух столбцов, так, что таблица $T_1$ будет верхней левой ячейкой. Тогда, учитывая утверждение, доказанное в базе индукции находим минимальную площать таблицы $T$ $$\begin{multline}S_{T} = \left (\sqrt{S_{T_1}}+\sqrt{S_{k+1k+1}} \right ) ^ 2 = \\ = \left (\sqrt{\left (\sqrt{S_{11}} + \sqrt{S_{22}} + \ldots + \sqrt{S_{kk}} \right )^2}+\sqrt{S_{k+1k+1}} \right ) ^ 2 = \\ = \left ( \sqrt{S_{11}} + \sqrt{S_{22}} + \ldots + \sqrt{S_{kk}}+\sqrt{S_{k+1k+1}}\right )^2.\end{multline}$$ Что и требовалось доказать. Заметим, что для тривиального случая $n = 1$ формула также остается в силе. Пусть $h$ высота таблицы, а $l$ — ее ширина. Учитывая, что по условию $l = 1,$ а $S = hl,$ находим, что минимальное значение высоты таблицы $h_{min} = \left ( \sqrt{S_{11}} + \sqrt{S_{22}} + \ldots + \sqrt{S_{nn}}\right )^2.$

Ссылки

Код решения на Ideone

«Низкая» таблица

Задача

В тридевятом государстве объявлено соревнование. Каждому участнику дается лист бумаги, ширина которого строго равна одному магическому метру, на котором надо начертить таблицу, состоящую из двух столбцов и двух строк. При этом для каждой ячейки таблицы указана минимальная площадь, которую должна эта ячейка занимать. Известно, что для правой верхней и левой нижней ячейки это значение равно $0.$ Но вот незадача: значения минимальных площадей для левой верхней — $S_{11}$ и правой нижней — $S_{22}$ ячеек могут быть какими угодно (в пределах разумного, конечно, хотя кто их этих сказочных персонажей разберет). Задача участников — начертить таблицу наименьшей высоты. Аленушка очень хочет победить, но она плохо знает математику, поэтому просит Вас помочь ей в этом непростом деле.

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

В единственной строке содержатся два натуральных числа: $S_{11}, \ S_{22},$ не превышающие $10^{14}.$

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

Минимальная высота таблицы в магических миллиметрах, округленная до ближайшего меньшего целого.

Тесты

Входные данные Выходные данные
1 2 5828
466 1194 3151849
8067 2659 19988861
5125 6755 23647646
3317 2652 11900840
25 9293 10282002
7081 7189 10282002
8192 1042 15077308
6795 1568 14891264
680 4510 8692456
9107 4760 27035040
7095 7846 29863113
6142 3794 19590583
9347 3639 24650258
8495 5394 27427394
2179 8718 19613999
1187 778 3886963
71 5592 6923209
100000000000000 100000000000000 400000000000000000

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

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

Пусть $h$ и $l$ — высота и ширина таблицы соответственно. Тогда ее площадь $S=hl.$ В силу того, что $l=1,$ задача о нахождении минимальной высоты таблицы сводится к нахождению ее минимальной площади. Обозначим высоту $i$-ой строки $h_i$, ширину $j$-го столбца $l_j$, а площадь ячейки таблицы, находящейся на пересечении $i$-ой строки и $j$-го столбца — $S_{ij}.$ Тогда $$\begin{multline}S = S_{11} +S_{12}+S_{21}+S_{22}=S_{11}+l_2 h_1+l_1 h_2+S_{22}= \\ =S_{11}+S_{11} \frac{l_2}{l_1} +S_{22} \frac{l_1}{l_2}+S_{22} = S_{11}+S_{11} y+S_{22} y^{-1}+S_{22},\end{multline}$$ где $y=\frac{l_2}{l_1}.$ Зафиксируем теперь $S_{11}$ и $S_{22}$ и рассмотрим функцию площади $S \left( y \right ) = S_{11}+S_{11} y+S_{22} y^{-1}+S_{22}.$ Найдем наименьшее значение данной функции. $\frac{\mathrm{d} S \left( y \right )}{\mathrm{d} y} = S_{11}-\frac{S_{22}}{y^{2}}.$ Приравнивая производную функции к нулю, находим, что функция имеет единственную стационарную точку $y_{0} = \sqrt{\frac{S_{22}}{S_{11}}}.$ Легко убедиться, что $y_0$ – точка глобального минимума, тогда $\min\limits_{y \in D\left(S\right)}S\left( y \right ) = S \left(y_0\right) = S_{11} + S_{22} + 2 \cdot \sqrt{S_{11} \cdot S_{22}} = \left( \sqrt{S_{11}} + \sqrt{S_{22}} \right )^2.$ Очевидно теперь, что минимальное значение площадь таблицы будет принимать при $S_{11}={S_{11}}’, \ S_{22}={S_{22}}’$ где ${S_{11}}’, \ {S_{22}}’$ – данные в условии минимальные значения площадей соответствующих ячеек. Отсюда имеем минимальное значение высоты таблицы $h_{min}=\left( \sqrt{{S_{11}}’} + \sqrt{{S_{22}}’} \right )^2.$

Ссылки

Код решения на Ideone

e-olymp 5868. A xor B

Задача

На стандартный вход подаются 2 натуральных числа [latex]A[/latex] и [latex]B[/latex]. Выведите на стандартный вывод результат применения к ним операции побитового исключающего или.

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

2 натуральных числа [latex]A, B ≤ 10^9[/latex] в десятичной системе счисления, разделённые пробелом.

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

Выведите результат указанной операции над числами.

Тесты

# Входные данные Выходные данные
1 3 7 4
2 12 11 7
3 15 9 6
4 8 10 2
5 10 10 0

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

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

Введем два числа и применим операцию исключающего или.В языке программирования С++ данная операция выглядим так как показано в коде программы.

Ссылки

e-olymp
ideone

e-olymp 7944. Площадь прямоугольника

Площадь прямоугольника

Найдите площадь прямоугольника.

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

Целочисленные стороны прямоугольника [latex]a[/latex] и [latex]b[/latex]  [latex](1 ≤ a, b ≤ 1000)[/latex].

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

Выведите площадь прямоугольника.

Тесты

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 [latex]1[/latex] [latex]1[/latex] [latex]1[/latex]
2 [latex]2[/latex] [latex]4[/latex] [latex]8[/latex]
3 [latex]511[/latex] [latex]428[/latex] [latex]218708[/latex]
4 [latex]5555[/latex] [latex]4444[/latex] [latex]24686420[/latex]
5 [latex]11[/latex] [latex]11[/latex] [latex]121[/latex]

 

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

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

Прямоугольником называется четырехугольник, у которого все углы равны. Все углы в прямоугольнике прямые, т.е. составляют [latex]90°[/latex]. Площадь прямоугольника равна произведению его сторон [latex](a, b)[/latex]. Следовательно формула решения задачи будет такой: [latex]a · b[/latex].

Ссылки

• Задача на e-olymp.

• Решение на сайте ideone.

e-olymp 920. Использование функций min и max

Задача

Задано три вещественных числа [latex]x, y[/latex] и [latex]z[/latex]. Определить [latex]\min\left(\max\left(x,y\right), \max\left(y,z\right), x+y+z\right)[/latex], воспользовавшись вспомогательными функциями для вычисления минимального и максимального элементов из двух заданных.

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

В одной строке задано три вещественных числа [latex]x, y[/latex] и [latex]z[/latex]. Значения чисел не превышают по модулю [latex]100[/latex].

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

Вывести ответ с двумя десятичными знаками.

Тесты

# Входные данные Выходные данные
1  5 6 7  7.00
2  1.05 2.25 -2.15  1.15
3  3 3 3  3
4  8.85 5.67 7.33  7.33
5  12 -15 13  10

 

Алгоритм решения

  1. Находим максимум из [latex]x[/latex] и [latex]y[/latex].
  2. Находим максимум из [latex]y[/latex] и [latex]z[/latex].
  3. Находим минимум из найденных максимумов.
  4. Находим минимум из найденного минимума и суммы данных чисел.

Условие задачи можно найти на e-olymp
Код решения — ideone

e-olymp 949. Двузначное из четырёхзначного

Задача

Из заданного четырёхзначного натурального числа образовать двузначное, состоящее из его средних цифр.

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

Одно четырёхзначное натуральное число.

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

Полученное двузначное число.

Тесты

# Входные данные Выходные данные
1 4765 76
2 7999 99
3 2514 51
4 9423 42
5 8234 23

 

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

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

Первым делом мы используем деление на 10 с присваиванием, чтобы избавиться от последней цифры числа. Дальше используем остаток от деления на 100, чтобы избавиться от первой цифры числа.

Ссылки

Задача на сайте e-olymp

Код решения Ideone

e-olymp 7367. Спортсмен

Задача

Спортсмен в первый день пробежал 10 км. Каждого следующего дня он увеличивал норму на 10% от нормы предыдущего дня. Опредилить через какое найменьшее количество дней спортсмен пробежит сусмарный путь не меньший чем [latex]N[/latex] км.

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

Целое число [latex]N (0 < N≤ 1000)[/latex].

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

Единственное число – количество дней.

Тесты

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 9 1
2 45 4
3 324 16
4 1234 28
5 213213123 153

Код программы №1 (с использованием цикла):

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

Сначала вводим 4 переменные: [latex] k=1 [/latex] ( количество дней ), [latex] T=10 [/latex] ( количество километров которое спортсмен пробежал ), [latex] N [/latex] ( количество километров которое спортсмен должен пробежать ) и [latex] S [/latex] ( количество километров которое спортсмен пробегает в день ). Цикл каждый раз будет прибавлять к расстоянию которое пробежал спортсмен, количество километров которое спортсмен должен пробежать в течение следующего дня, с учетом того, что каждый день он будет пробегать на [latex] 10 [/latex] процентов больше, чем в прошлый день, параллельно увеличивая количество дней, пока [latex] N [/latex] будет больше [latex] T [/latex]. Если же [latex] N [/latex] при вводе изначально будет меньше [latex] T [/latex], то программа выведет, что спортсмену достаточно одного дня.

  • Время срабатывания программы при [latex]N = 1000[/latex] : [latex]65[/latex] [latex]ms[/latex]

 

Ссылки

  • Задача на сайте e-olymp
  • Код решения в Ideone

Код программы №2(с использованием линейных вычислений):

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

Также данную задачу можно решить с помощью формулы геометрической прогрессии [latex]S=\frac{b_1(q^n-1)}{q-1}[/latex] из которой нам нужно будет выразить степень [latex] n [/latex] через логарифм при условии того, что по условию задачи мы знаем, что [latex] q=1.1 [/latex] и [latex] b_1=1 [/latex]. И мы получаем, что [latex] \left(n=\log_{1.1}\left(\frac{s}{100}+1\right)\right) [/latex]. При записи логарифма по основанию в С++ мы пользуемся основным свойством логарифмов: [latex] \log_{a}\left(b\right)=\frac{\log_{c}\left(b\right)}{\log_{c}\left(a\right)} [/latex]. Также используем функцию сeil, которая округлит выходное число вверх, до ближайшего целого. ( [latex] S [/latex] — количество километров, которое должен пробежать спортсмен ).

  • Время срабатывания программы при [latex]N = 1000[/latex] : [latex]76[/latex] [latex]ms[/latex]

Ссылки