КМ259(б). Квартеты из клеток

Задача

Назовем квартетом четверку клеток на клетчатой бумаге, центры которых лежат в вершинах прямоугольника со сторонами, параллельными линиям сетки. Какое наибольшее число квартетов, не имеющих общих клеток, можно разместить на прямоугольнике [latex]mn[/latex] клеток?

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

[latex]m, n[/latex]

Вывод

[latex]x[/latex] -кол-во квартетов.

Тесты

m n x
8 6 12
16 7 24
17 8 29.75
15 11 37

Код

 

Решение

Если [latex]m[/latex] и [latex]n[/latex] четные то на прямоугольнике [latex]mn[/latex] можно разместить [latex]\frac{mn}{4}[/latex] квартетов. Если [latex]m[/latex] четное, а [latex]n[/latex] нечетное (и наоборот), то можно разместить [latex]m(n-1)[/latex]. И наконец если [latex]m[/latex] и [latex]n[/latex] — нечетные, то нужно рассматривать два случая:

  1.  [latex]n = 4k + 1[/latex], в этом случае у нас формула такая: [latex]\frac{m(n-1)}{4}[/latex]
  2. Иначе, у нас другая формула: [latex]\frac{ \left(m(n-1)-2\right)}{4}[/latex]

Ссылка на решение в ideone.

e-olymp 63. Анфиса и цветы

Задача. Анфиса и цветы

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

Мурзик одну из цветочных клумб сделал в виде шахматной доски размерами [latex]m[/latex] на [latex]n,[/latex] в каждой клеточке которой растет какой-то цветок. Иногда на эту клумбу он выводит на прогулку Анфису (да, не удивляйтесь, они действительно друзья). Анфиса, начиная всегда с верхнего левого угла передвигается по клумбе к правому нижнему и собирает цветы, причем таким образом, чтобы каждый раз проходить новым маршрутом, а Мурзик на выходе вручает ей кусочек сыра.
Посчитать, какое наибольшее количество кусочков сыра получит Анфиса, если она все время старается сохранить как можно больше цветов. При каждом очередном своем проходе Анфиса обязательно должна собрать как минимум один цветок.

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

В одной строке через пробел заданы два числа [latex]m[/latex] на [latex]n.[/latex]

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

Вывести наибольшее количество кусочков сыра, которые может получить Анфиса.
Также условие задачи можно посмотреть здесь.

<р2>Реализация

Проверить код можно тут.

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

Входные данные (m, n) Выходные данные
1 2, 3 3
2 3, 3 5
3 3, 4 7
4 4, 3 7
6 5, 7 25

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

Задана цветочная клумба в виде шахматной доски размерами [latex]m[/latex] на [latex]n[/latex]. Очевидно, что количество цветов на данной клумбе равно [latex]m\cdot n[/latex]. Пусть Анфиса, совершая свое очередное передвижение, начиная с левого верхнего угла клумбы и направляясь к правому нижнему, съедает [latex](m-1)\cdot (n-1)[/latex]  цветов, так как, согласно условию задачи, Анфиса обязательно должна собрать как минимум один цветок при каждом проходе. После каждого такого прохода на выходе она получает один кусочек сыра.

Следовательно, имеет место следующая формула: [latex]p=(m-1)\cdot (n-1)+1[/latex], где [latex]p[/latex] — наибольшее количество кусочков сыра, которое может получить Анфиса. Действительно, если [latex]m=2[/latex], [latex]n=3[/latex], то получаем [latex]p=3[/latex].

Mif 1

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

Даны действительные числа [latex]x, y[/latex]. Получить [latex]max(x,y)[/latex].

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

Два действительных числа — [latex]x[/latex] и [latex]y[/latex].

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

Число, являющееся максимумом из двух чисел — [latex]maxOfTwo[/latex]

Тесты

Входные данные Выходные данные
1 3 4 4
2 -3 -5 -3
3 0 12 12

 

Решение:

Альтернативное решение:

 

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

Объявляем три переменные типа  int  —  x, y, maxOfTwo . Вводим с клавиатуры значения для  x и  y . После чего с помощью условного оператора  if-else  проверяем  x>y . Если истинно, присваиваем переменной  maxOfTwo  значение переменной  x , а иначе  MaxOfTwo = y . Выводим значение  MaxOfTwo  с помощью функции  System.out.println() .

Описание альтернативного решения:

Объявляем три переменные типа  int  —  x, y, maxOfTwo . Вводим с клавиатуры значения для  x и  y . Используя тернарный оператор  ?: проверяем истинность выражения  x>y и присваиваем результат операции переменной  maxOfTwo . Выводим значение  MaxOfTwo  с помощью функции  System.out.println() .

 

 

 

 

Mif 5

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

Даны действительные числа [latex]x, y, z[/latex]. Вывести наименьшее и наибольшее из них. Если наименьших или наибольших чисел окажется несколько, то укажите в скобках количество.

Входные данные: действительные числа [latex]x, y, z.[/latex]

Выходные данные: Максимальное значение (Highest value), количество максимальных значений (Count of highest values), минимальное значение (Lowest value), количество минимальных значений (Count of lowest values)

Тесты

Входные данные Выходные данные
 [latex]x, y, z[/latex] Максимум Количество максимумов Минимум Количество минимумов
1 10 20 1 10 2
2 10
3 20

Решение

Ссылка на решение задания на онлайн компиляторе Ideone.com

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

Для нахождения нахождения найбольшего max и найменьшего min значений используем цикл for. Если текущее число больше максимального, то ставим счетчик countMax на 1 и сохраняем новое максимальное значение max. Если последующее число равно текущему максимальному max, то увеличиваем счетчик countMax. Аналогично и для поиска найменьшего min значения.

e-olymp 923. Время года

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

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

Определить название времени года по заданному номеру месяца, используя составные условия.

Тесты

Входные данные: одно число — номер месяца

Выходные данные: для весенних месяцев вывести Spring, для летних — Summer, для осенних — Autumn и для зимних — Winter

Входные данные Выходные данные
1 12 Winter
2 5 Spring
3 7 Summer
4 10 Autumn

Код

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

Результаты проверки доступны на e-olymp

Пояснение

Для хранения номера месяца будем использовать переменную  monthNumber типа  int, а для хранения названия времени года — переменную seasonName  типа String. Обьявим эти переменные в начале программы. Проинициализируем переменную  monthNumber значением из стандартного потока ввода. Переменную  seasonName проинициализируем значением, которое определяется с помощью тернарных операторов, с помощью которых поочередно проверяется соответствие значения переменной  monthNumber  определенному времени года: если остаток от деления номера месяца на 12 будет меньше, чем 3, то переменная будет проинициализирована значением «Winter»; если номер месяца меньше, чем 6 — значением «Spring» ; если меньше, чем 9 — значением «Summer»; значением «Autumn» в иных случаях. Результат работы программы — вывод значения переменной  seasonName.

 

 

e-olymp 107. Компакт-диски

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

Чистые компакт-диски продают в трёх видах упаковок. Упаковка из 100 дисков стоит 100 грн., из 20 дисков — 30 грн., а один диск стоит 2 грн. Какую минимальную сумму нужно истратить для покупки [latex]N[/latex] таких дисков?

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

Единственное число [latex]N[/latex] — количество дисков. Значение [latex]N[/latex] натуральное, не больше 1000.

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

Искомая минимальная сумма в гривнах.

Тесты

Входные данные Выходные данные
1 0 0
2 163 196
3 238 260
4 298 300

Решение

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

Задача может быть решена по алгоритму «купить максимальное количество упаковок из 100, потом из 20 дисков, а потом докупать по одному диску, чтобы получить требуемые для покупки [latex]N[/latex] дисков». Такой алгоритм можно записать формулой: [latex](N / 100) * 100 + (N \% 100 / 20) * 30 + 2 * (N \% 20)[/latex].

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

К примеру, если необходимо купить 96 дисков, куда дешевле купить за 100 гривен упаковку, содержащую 100 дисков, чем 4 упаковки по 20 дисков и отдельно еще 16 дисков, что в общей стоимости даст 152 гривны.

Поэтому сперва следует проверить, не будет ли покупка большего количества дисков дешевле. Для этого используются условия if (N % 100 >= 65) и if (N % 20 > 15), где 65 и 15 — лимит количества дисков, при превышении которого покупка упаковок из 100 и 20 дисков соответственно — дешевле.

Посмотреть решение задания можно на сайте e-olymp.

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

e-olymp 108. Среднее число

Задача

Дано три различных числа [latex]a[/latex], [latex]b[/latex], [latex]c[/latex]. Вывести среднее из них.

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

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

Числа  [latex]a[/latex], [latex]b[/latex], [latex]c[/latex] — целые и по модулю не превышают 1000.

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

Единственное число — ответ на задачу.

Тесты

 №         a         b          c     Результат
  1         5         7          9              7
  2         7         5          9              7
  3         9         7          5              7
  4         7         9          5              7
  5         5         9          7              7
  6         9         5          7              7

Решение

Проверить работу кода можно в облаке по ссылке — Ideone.

Пояснения

В первом условии  if((a > b && b > c)||(c > b && b > a)) , мы проверяем оба условия при которых при выполнении любого из них средним числом будет второе число. В следующем условии  else if ((b > a && a > c)||(c > a && a > b )) , проделываем точно такую же операцию, только уже с первым числом. Если же два предыдущих условных оператора не выполняются, то результат будет таков, что средним числом будет являться третье число.

A39. Алгоритмы с ветвлением

Условие
Даны два действительных числа. Вывести первое число, если оно больше второго, и оба числа, если это не так.

Тесты

Входные данные Выходные данные
3 2 3
5 10 5 10
30 20 30
30 50 30 50
Решение
Пусть даны два действительных числа x, y. Для ввода x и y используем тип double для действительных чисел. Задаем условие, если первое число больше второго, используя оператор if, выводим первое число x.
Вводим else, если это не так, выводим оба числа.

Ideone.com

Mif 17.1

Задача. Принадлежит ли точка \left(x;y \right) фигуре на рисунке?

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

Два числа  xy — координаты точки.

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

Слово «YES», если точка принадлежит треугольнику и «NO» ,  если не принадлежит.

Тесты

x y Результат
4 -2  NO
2 1 YES
0 3 YES
5 0 NO
0 -1 NO

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

 

Решение

Точка будет принадлежать треугольнику только при таких x и y, что сумма их модулей не превышает 4. При выполнении условия выводим на экран: «YES». В противном случае — «NO».

Ссылка на Ideone

http://ideone.com/GVQ1Yo

Mif3

Задача.
Даны действительные числа [latex]x ,[/latex] [latex] y ,[/latex] [latex] z.[/latex] Получить [latex]min ( x,y,z )[/latex].

Тесты

Входные данные 4 3 2 0 2 1 0 -1 4
Выходные данные 2 0 -1

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

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

Предположим, что [latex] x [/latex] минимальное из трёх чисел, и путем сравнения с другими двумя находим минимальное, и если после сравнения число [latex] x [/latex] остается минимальным, то выводим его. В остальных случаях выводим либо [latex] y [/latex] либо [latex] z [/latex]

Ссылка на ideone