Форум » Циклы и ветвления » Егэ 21 ном.85 » Ответить

Егэ 21 ном.85

GAF: Сколько количество входных а должно быть на промежутке от 1 до 100, чтобы ответ был таким же, что и при а=20 Если х>1 то f=x mod 3 + f(x div 3) иначе f=x Если f(i)=2, то k=k+1 У меня получается ответ 12, а должно быть 10 Мои подходящие числа под а это от 18 до 29

Ответов - 5

Поляков: GAF пишет: У меня получается ответ 12, а должно быть 10. Мои подходящие числа под а это от 18 до 29 Думаю, что вы сами можете ответить на свой вопрос. Напишите программу для проверки и попробуйте. Если приведенный ответ правильный, ищите ошибку у себя - есть пошаговое выполнение программы для отладки. Если выясните, что ваш ответ верный, напишите сюда с доказательством (например, с программой).

polyakovss: Здравствуйте, GAF! function f(x: integer): integer; begin if x >1 then f := x mod 3 + f(x div 3) else f := x; end;1) Функция f(x) находит сумму цифр числа x в троичной системе счисления. 2) Следовательно, в цикле for i := 1 to a do if f(i) =2 then k:=k+1; в интервале [1, a] ищется количество чисел, в которых в троичной системе счисления сумма цифр равна 2. В десятичной системе счисления это числа 2, 4, 6, 10, 12, 18, 28, 30, ... 3) При а=20, очевидно, k=6 (что соответствует числам 2, 4, 6, 10, 12, 18). Такой же результат будет получен для чисел 18, 19, 20, 21, 22, 23, 24, 25, 26, 27. Этих чисел 10. Для чисел 28 и 29 k=7. Ответ: 10.

GAF: все равно не пойму, f(28)=4 и f(29)=5, значит же k остается равной 6 все еще


polyakovss: Здравствуйте, GAF! Вы пишете: все равно не пойму, f(28)=4 и f(29)=5, значит же k остается равной 6 все еще Во-первых, f(28)=2, а f(29)=3 (это можно проверить на компьютере). Но начнем заново: 1) Функция f(x) находит сумму цифр числа x в троичной системе счисления. 110 = 13 --> f(1) = 1 210 = 23 --> f(2) = 2 310 = 103 --> f(3) = 1 410 = 113 --> f(4) = 2 510 = 123 --> f(5) = 3 610 = 203 --> f(6) = 2 710 = 213 --> f(7) = 3 810 = 223 --> f(8) = 4 910 = 1003 --> f(9) = 1 1010 = 1013 --> f(10) = 2 и так далее. Видим, что f(i) = 2, если i = 2, 4, 6, 10. Еще f(i) = 2, если i = 12, 18, 28, 30, 36, ... (проверьте самостоятельно). (Понятно, надеюсь, что 2810 = 10013 --> f(28) = 2, а 2910 = 10023 --> f(29) = 3) Таким образом, f(i) = 2, если i = 2, 4, 6, 10, 12, 18, 28, 30, 36, ... 2) В цикле for i := 1 to a do if f(i) = 2 then k:=k+1; в интервале [1, a] ищется количество чисел, в которых в троичной системе счисления сумма цифр равна 2. Действительно, условие if f(i) = 2 "будет срабатывать", если i = 2, 4, 6, 10, 12, 18, 28, 30, 36, ... Но "а" будет ограничивать интервал: так при a=10 условие if f(i) = 2 "сработает" для чисел 2, 4, 6, 10 и k станет равно 4; при a=11 условие if f(i) = 2 "сработает" для чисел 2, 4, 6, 10 и k станет равно 4; при a=12 условие if f(i) = 2 "сработает" для чисел 2, 4, 6, 10, 12 и k станет равно 5; при a=7, 8, 9 условие if f(i) = 2 "сработает" для чисел 2, 4, 6 и k станет равно 3; 3) по условию задачи нужно найти количество чисел а, при которых условие if f(i) = 2 "сработает" столько же раз, сколько "срабатывает" для a=20. при a=20 условие if f(i) = 2 "сработает" 6 раз для чисел 2, 4, 6, 10, 12, 18 и k станет равно 6; Ясно, что число 18 должно войти в "подсчет", так как при a=17 k=5. Так как после 18 следующее число, дающее f(i)=2, равно 28 (i = 2, 4, 6, 10, 12, 18, 28, 30, 36, ...), то вместе с числом 18 подойдут и числа 19, 20, 21, 22, 23, 24, 25, 26, 27. Всего этих чисел 10. Число a=28 не подойдет потому, что при a=28 в цикле условие if f(i) = 2 "сработает" 7 раз для чисел i = 2, 4, 6, 10, 12, 18, 28 и k станет равно 7, а не 6. По той же причине не подойдет a=29.

GAF: Спасибо, извините. Я f(9) неправильно посчитал



полная версия страницы