Главная страница «Первого сентября»Главная страница журнала «Информатика»Содержание №5/2009


В мир информатики
Фокус

“Определение зачеркнутой цифры”№2

2Записав число, сумма цифр которого делится на 9, и отвернувшись, предложите кому-нибудь это число умножить на любое число (например, на калькуляторе). В полученном произведении предложите зачеркнуть любую из цифр, кроме нуля, а оставшиеся цифры переставить в произвольном порядке. После объявления результатов указанных действий вы можете указать, какая цифра была зачеркнута — она равна тому наименьшему натуральному числу, которое надо добавить к сумме цифр объявленного числа, чтобы получить число, делящееся на 9.

При этом заметим, что если сумма цифр объявленного числа уже делится на 9, то, значит, была вычеркнута цифра 9.

Пример. Предположим, что вы написали число 132 354 (1 + 3 + 2 + 3 + 5 + 4 = 18). Пусть кто-либо, умножив это число, например, на 7, в полученном произведении 926 478 зачеркнул цифру 6 и, переставив цифры, объявил результат 79 482. Находя сумму цифр результата, вы получаете 30. Ближайшее число, большее 30 и делящееся на 9, есть 36. Следовательно, как раз цифра 6 и есть зачеркнутая цифра.

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

алг Фокус_отгадывание_зачеркнутой_цифры

нач цел исходное, исходное2, сумма_цифр,

последняя_цифра

цел результат, ближайшее_кратное_9,

зачеркнутая_цифра

вывод нс, "Сейчас я покажу фокус"

|Приостановка программы до нажатия любой

|клавиши

нц

кц_при inkey()<>""

|Генерируем число, сумма цифр

|которого кратна 9

нц

исходное := 1 + rnd(1000)

исходное2 := исходное

|Находим сумму цифр полученного числа

сумма_цифр := 0

нц пока исходное2 > 0

последняя_цифра := mod(исходное2, 10)

сумма_цифр := сумма_цифр +

последняя_цифра

исходное2 := div(исходное2, 10)

кц

кц_при mod(сумма_цифр, 9) = 0

|и выводим его

вывод нс, "Вот число: ", исходное

вывод нс, "Умножьте его на любое число"

|Приостановка программы до нажатия любой

|клавиши

вывод нс, "В полученном произведении

зачеркните"

вывод нс, "любую цифру, кроме нуля,

и запомните ее"

|Приостановка программы до нажатия любой

|клавиши

вывод нс, "Оставшиеся цифры переставьте "

вывод нс, "в произвольном порядке"

|Приостановка программы до нажатия

|любой клавиши

вывод нс, "Какое число получилось?"

ввод результат

|Определяем зачеркнутую цифру:

|1) находим сумму цифр полученного числа

сумма_цифр := 0

нц пока результат > 0

последняя_цифра := mod(результат, 10)

сумма_цифр := сумма_цифр +

последняя_цифра

результат := div(результат, 10)

кц

|2)определяем зачеркнутую цифру

Очистка_Экрана

если mod(сумма_цифр, 9) = 0

то

зачеркнутая_цифра := 9

иначе

|Находим дополнение найденной суммы

|до ближайшего большего числа, кратного 9

ближайшее_кратное_9 := (div(сумма_цифр, 9)

+ 1) * 9

зачеркнутая_цифра := ближайшее_кратное_9

- сумма_цифр

все

|Вывод ответа

вывод нс, "Вы зачеркнули цифру ",

зачеркнутая_цифра

|Приостановка программы до нажатия

|любой клавиши

кон

— где Очистка_экрана — стандартная процедура очистки экрана.

Переменные величины, используемые в программе:

исходное — исходное число;

исходное2 — “двойник” величины исходное, используемый для определения суммы цифр (величина исходное не должна меняться);

сумма_цифр — сумма цифр величин исходное2 и результат (см. далее);

последняя_цифра — последняя цифра величин исходное2;

результат — число, объявленное участником фокуса;

ближайшее_кратное_9 — ближайшее число, большее суммы цифр числа результат, кратное 9 (без учета случая, когда эта сумма кратна 9);

зачеркнутая_цифра — искомая цифра.

Для приостановки программы до нажатия любой клавиши в программах на других языках программирования можно также использовать оператор цикла с постусловием:

1) в языке Паскаль:

Repeat

Until KeyPressed

2) в языке Бейсик:

DO

LOOP UNTIL INKEY$ <> ""


2 См. также статью “Фокус «Определение зачеркнутой цифры»” / “В мир информатики” № 115 (“Информатика” № 21/2008).

TopList