Автор | Сообщение |
|
Отправлено: 07.11.15 18:34. Заголовок: Задание 21 - 66
Здравствуйте! Подскажите, как делать такого типа задания(в разборе их нет)? На ваш взгляд, есть ли вероятность, что такое тяжелое задание ( по сравнению с предыдущим будет в реальном экзамене)? Спасибо! ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Напишите в ответе количество различных значений входной переменной 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
[только новые]
|
|
|
| Администратор
|
Сообщение: 956
|
|
Отправлено: 11.12.15 07:15. Заголовок: teraquote пишет: По..
teraquote пишет: цитата: | Подскажите, как делать такого типа задания(в разборе их нет)? |
|
Некоторые идем: 1) заметим, что для заданного отрезка [1000,2000] функция f() вызывается только с аргументами, меньшими 100 2) нужно понять, что делает с таким аргументом функция f(), что она возвращает; в домашней обстановке можно прогнать эту функцию для всех x от 1 до 100, посмотреть на результаты, и потом разобраться в коде 3) дальше анализируем цикл в основной программе: когда сработают оба условных оператора = когда увеличивается счетчик. цитата: | есть ли вероятность, что такое тяжелое задание ( по сравнению с предыдущим будет в реальном экзамене) |
|
Не думаю, что такая задача будет. Но для тренировки (домашнего разбора) - самое то.
|
|
|