Комментарии 20
>но эти задачи оторваны от текущей реальности, а хотелось бы прокачать мозг практичным навыком
Не могли бы вы пояснить? То есть, этими приложениями не получится натренировать навык быстрого счета в уме?
Не могли бы вы пояснить? То есть, этими приложениями не получится натренировать навык быстрого счета в уме?
Натренировать можно. Но востребован ли навык? Например, известная всем хаброюзерам «В уме» формирует навыки довольно сложных расчетов, которые в повседневной реальности редко используются.
Я просто не пользовался таким софтом, но периодически подумываю, т.к. хотелось бы быстрее выполнять арифметические действия над целыми и дробными числами.
А какие именно навыки там формируются? Умножение и деление трехзначных чисел, быстрое возведение в квадрат — это, допустим, весьма полезные навыки. А также операции с числами с плавающей запятой.
А какие именно навыки там формируются? Умножение и деление трехзначных чисел, быстрое возведение в квадрат — это, допустим, весьма полезные навыки. А также операции с числами с плавающей запятой.
Думаю Вам стоит попробовать этот тренажер. Достаточно пары часов на знакомство. Подробный анализ задач не делал, но многие задачи мне показались через чур частными. В арифметике полно частных случаев и, как отмечалось выше, чем больше эвристик помнишь, тем быстрее вычисляешь. Например, умножение 11*52 = 5 * 100 + (5+2)*10 + 2 = 572. И таких правил под сотню. Многие из них связаны с теорией чисел.
О, это очень любопытная тема на самом деле!
Я даже собирался сам написать статью, но, к сожалению, руки так и не дошли.
Но у меня есть дополнение!
Можно не запоминать второй ряд чисел, который относится к году, его достаточно легко рассчитать:
Возьмем, например, 1988г. (первый в ряду).
Разобьем его на 2 части: 1900 и номер года — 88.
Для 19хх всегда берем +1.
А из 88 можно отбросить числа кратные 28, ближайшее — 84, тогда останется 4.
Далее из того что осталось отбрасываем числа кратные 7 (просто для удобства) 4%7 = 4.
И еще шаг: опять же, то что осталось, делим на 4 и округляем в меньшую сторону, 4/4=1.
т.е. если собрать все в кучу. пусть y — номер года, 88 в примере
n = ((y%28)%7) + int((y%28)/4)
в итоге получаем: 1 (за счет 1900) + 4 + 1 = 6.
еще пример: крайнюю циферку — 2015г.
для 20хх — вместо +1 будет +0, т.е. просто отбрасываем
остается:
15%7 = 1
int(15/4) = 3
0 + 1 + 3 = 4.
В общем, если есть интерес к этой теме я могу написать свой вариант расчета.
Я даже собирался сам написать статью, но, к сожалению, руки так и не дошли.
Но у меня есть дополнение!
Можно не запоминать второй ряд чисел, который относится к году, его достаточно легко рассчитать:
Возьмем, например, 1988г. (первый в ряду).
Разобьем его на 2 части: 1900 и номер года — 88.
Для 19хх всегда берем +1.
А из 88 можно отбросить числа кратные 28, ближайшее — 84, тогда останется 4.
Далее из того что осталось отбрасываем числа кратные 7 (просто для удобства) 4%7 = 4.
И еще шаг: опять же, то что осталось, делим на 4 и округляем в меньшую сторону, 4/4=1.
т.е. если собрать все в кучу. пусть y — номер года, 88 в примере
n = ((y%28)%7) + int((y%28)/4)
в итоге получаем: 1 (за счет 1900) + 4 + 1 = 6.
еще пример: крайнюю циферку — 2015г.
для 20хх — вместо +1 будет +0, т.е. просто отбрасываем
остается:
15%7 = 1
int(15/4) = 3
0 + 1 + 3 = 4.
В общем, если есть интерес к этой теме я могу написать свой вариант расчета.
Рассматривал похожий вариант. Не понравилась операция %28. Существенно ограничивает кол-во потенциальных пользователей метода. Поэтому в моей реализации используется сложение с одноразрядными числами, операции %4 и %7 и дополнение до 7(или 8). Для XX века еще удобно пользоваться дополнением до 50. Но после небольшой тренировки значения y() запоминаются и дополнением уже можно не пользоваться.
операция %28 же в целом не обязательна.
запомнить достаточно просто: 28 — 56 — 84. если год близок к одному из чисел можно упростить расчет, отбросив лишнее.
запомнить достаточно просто: 28 — 56 — 84. если год близок к одному из чисел можно упростить расчет, отбросив лишнее.
Таки проще в уме посчитать по формуле Зеллера.
А ещё лучше, вот так:
month, day, year — номер месяца, день, год
a = (14 – month) / 12
y = year – a
m = month + 12 * a – 2
day_of_week = (7000 + (day + y + y / 4 – y / 100 + y / 400 + (31 * m) / 12)) MOD 7
(/ — целочисленное деление, MOD — нахождение остатка)
В итоге получится число от 0 до 6.
0 — воскресенье, 1 — понедельник, ..., 6 — суббота
А ещё лучше, вот так:
month, day, year — номер месяца, день, год
a = (14 – month) / 12
y = year – a
m = month + 12 * a – 2
day_of_week = (7000 + (day + y + y / 4 – y / 100 + y / 400 + (31 * m) / 12)) MOD 7
(/ — целочисленное деление, MOD — нахождение остатка)
В итоге получится число от 0 до 6.
0 — воскресенье, 1 — понедельник, ..., 6 — суббота
напомнило:
Была у Александра Ивановича удивительная особенность. Он мгновенно умножал и делил в уме большие трехзначные и четырехзначные числа. Но это не освободило Александра Ивановича от репутации туповатого парня.
— Слушай, Александр Иванович, — спрашивал сосед, — сколько будет 836 на 423?
— 353628, — отвечал Корейко, помедлив самую малость. И сосед не проверял результата умножения, ибо знал, что туповатый Корейко никогда не ошибается
(С) Ильф и Петров. Золотой телёнок.
Была у Александра Ивановича удивительная особенность. Он мгновенно умножал и делил в уме большие трехзначные и четырехзначные числа. Но это не освободило Александра Ивановича от репутации туповатого парня.
— Слушай, Александр Иванович, — спрашивал сосед, — сколько будет 836 на 423?
— 353628, — отвечал Корейко, помедлив самую малость. И сосед не проверял результата умножения, ибо знал, что туповатый Корейко никогда не ошибается
(С) Ильф и Петров. Золотой телёнок.
Ещё по теме: Алгоритм Судного дня
Нужно разобраться с самой причиной проблемы :)
Проекты стабильного календаря
Проекты стабильного календаря
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Вычисление дня недели в уме