Минутка развития

в 15:40, , рубрики: математика, Спортивное программирование, метки: ,

Привет!

Предыстория

Вчера начал копаться в старых книгах и нашел отличную книгу Реймонда Смаллиана «Принцесса или тигр». Сразу начал читать, а после прочтения первой главы, решил выписать пару задачек, но подумал, что этого мало и надо бы еще выписать задачки для программистов.

Приступим

Первая задачка очень проста и здесь только для разминки: Предположим, что у вас и у меня имеется одинаковая сумма денег. Сколько денег я должен вам дать, чтобы у вас стало на 10 долларов больше, чем у меня?

Решение

Решение автора мне не очень понравилось и мне бы хотелось решить ее уравнением:
x = 10 — x
2x = 10
x = 5, где x — кол-во денег которое я должен вам дать, ответ: 5

Вторая задачка также из книги, но в книге опечатка, так что будем решать по-моему. В зоомагазине продают больших и маленьких птиц. Большая птица вдвое дороже маленькой. Леди, зашедшая в магазин, купила 5 больших птиц и 3 маленьких. Если бы она вместо этого купила 3 больших птицы и 2 меленьких, то потратила на 20 долларов меньше. Сколько стоит каждая птица?

Решение

Опять получаем уравнение. Пусть x — цена большой птицы, а y — цена маленькой:
5x + 3y = 3x + 2y + 20
5x — 3x + 3y — 2y = 20
2x + y = 20
4y + y = 20
y = 20 / 5
y = 4. Большая птица стоит 2y = 8 долларов, ну а маленькая 4 доллара. Проверим:
В первом случаи леди купила 5 * 8 + 3 * 4 = 52, а во втором — 3 * 8 + 2 * 4 + 20 = 52. Все правильно.

Еще одна задача, тоже простая, на этот раз не из математики, взята отсюда: n школьников делят k яблок поровну, то есть так, чтобы количество яблок, доставшихся любым двум школьникам, отличалось бы не более, чем на 1.

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

При решении этой задачи нельзя пользоваться условной инструкцией if и циклами.

Решение

Несложно прийти к формуле (n — k % n) % n — вычитаем количество учеников, получивших наибольшее число яблок из числа всех учеников и берем остаток от деления на n на случай, если таких таких учеников нет.

Еще одна задача: Напишите программу, которая считывает два целых числа a и b и выводит наибольшее значение из них. Числа — целые от 1 до 1000.

При решении задачи можно пользоваться только целочисленными арифметическими операциями +, -, *, //, %, =. Нельзя пользоваться нелинейными конструкциями: ветвлениями, циклами, функциями вычисления модуля, извлечения квадратного корня.

Решение

Докажем справедливость данной формулы нахождения максимума из двух чисел:
w = (abs(a — b) + (a + b)) / 2;
Если a > b то модуль раскроется с плюсом:
(a — b + a + b) / 2 = 2a / 2 = a. Если a < b то модуль раскроется с минусом: (b — a + a + b) / 2 = 2b / 2 = b. Если a == b тогда: a — b = 0 (a + a) / 2 = a.
Так как в условии задачи сказано не пользоваться функциями вычисления модуля предлагаю вариант свёрстанный на % (((a + b) % b — 1) * a + ((a + b) % a — 1) * b) div (a % b + b % a)

И последняя на сегодня: Однажды мама попросила Петю сходить в магазин и купить ровно n фруктов. Придя
в магазин он увидел, что может купить яблоки, бананы, апельсины и айву. Но он не может
купить произвольное количество каждого вида фруктов:
• Бананы продаются гроздьями по 5 бананов в каждой, поэтому их количество должно
быть кратно пяти.
• Петя и его сестра одинаково сильно любят яблоки, поэтому количество яблок должно
быть чётным.
• Апельсинов в магазине осталось всего 4 штуки.
• Петя не очень любит айву, поэтому не будет покупать больше одной.
Посчитайте, сколько всего различных способов купить n фруктов есть у Пети.
Входные данные Единственная строка содержит одно целое число n —
количество фруктов.
Результат: Нужно вывести одно число — количество способов купить n фруктов.
P.S. Это задача с районной олимпиады Севастополя за 2013 год. Авторство принадлежит Алексею Щепину.

Решение
Честно говоря, я забыл объяснение для этой задачи и буду признателен, если кто-то его напишет (: А решение на питоне выглядит таким образом:

n = int(input())
print(n + 1)

Спасибо за прочтение (:

Автор: yegorf1

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js