Предыстория
Вчера начал копаться в старых книгах и нашел отличную книгу Реймонда Смаллиана «Принцесса или тигр». Сразу начал читать, а после прочтения первой главы, решил выписать пару задачек, но подумал, что этого мало и надо бы еще выписать задачки для программистов.
Приступим
Первая задачка очень проста и здесь только для разминки: Предположим, что у вас и у меня имеется одинаковая сумма денег. Сколько денег я должен вам дать, чтобы у вас стало на 10 долларов больше, чем у меня?
x = 10 — x
2x = 10
x = 5, где x — кол-во денег которое я должен вам дать, ответ: 5
Вторая задачка также из книги, но в книге опечатка, так что будем решать по-моему. В зоомагазине продают больших и маленьких птиц. Большая птица вдвое дороже маленькой. Леди, зашедшая в магазин, купила 5 больших птиц и 3 маленьких. Если бы она вместо этого купила 3 больших птицы и 2 меленьких, то потратила на 20 долларов меньше. Сколько стоит каждая птица?
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 и циклами.
Еще одна задача: Напишите программу, которая считывает два целых числа 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)
Спасибо за прочтение (:
ссылка на оригинал статьи http://habrahabr.ru/post/208546/
Добавить комментарий