Форум » Циклы и ветвления » Задание 21 - 66 » Ответить

Задание 21 - 66

teraquote: Здравствуйте! Подскажите, как делать такого типа задания(в разборе их нет)? На ваш взгляд, есть ли вероятность, что такое тяжелое задание ( по сравнению с предыдущим будет в реальном экзамене)? Спасибо! ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Напишите в ответе количество различных значений входной переменной a из интервала от 1000 до 2000 (включая границы), при которых программа выдаёт тот же ответ, что и при входном значении a = 1111. Значение a = 1111 также включается в подсчёт различных значений a: var a, i, k: integer; function f(x: integer): integer; var m: integer; begin if x < 10 then f := x else begin m := f(x div 10); if m < x mod 10 then f := x mod 10 else f := m; end; end; begin k := 0; readln(a); for i := 1000 to a do if f(i mod 100) = 1 then if f(i div 100) = f(i mod 100) then k := k + 1; writeln(k); end.

Ответов - 1

Поляков: teraquote пишет: Подскажите, как делать такого типа задания(в разборе их нет)? Некоторые идем: 1) заметим, что для заданного отрезка [1000,2000] функция f() вызывается только с аргументами, меньшими 100 2) нужно понять, что делает с таким аргументом функция f(), что она возвращает; в домашней обстановке можно прогнать эту функцию для всех x от 1 до 100, посмотреть на результаты, и потом разобраться в коде 3) дальше анализируем цикл в основной программе: когда сработают оба условных оператора = когда увеличивается счетчик. есть ли вероятность, что такое тяжелое задание ( по сравнению с предыдущим будет в реальном экзамене) Не думаю, что такая задача будет. Но для тренировки (домашнего разбора) - самое то.



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