Задание 20. Пример задания
Условие: Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа L и M. Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 7.
Бейсик | Паскаль |
DIM X, L, M AS INTEGER INPUT X L=0: M=0 WHILE X > 0 L = L+1 IF M < (X MOD 10) THEN M = X MOD 10 ENDIF X = X \ 10 WEND PRINT L PRINT M | var x, L, M: integer; begin readln(x); L:=0; M:=0; while x>0 do begin L:=L+1; if M < (x mod 10) then begin M:=x mod 10; end x:= x div 10; end; writeln(L); write(M); end. |
Си | Алгоритмический |
#include<stdio.h> void main() { int x, L, M; scanf("% d", &x); L=0; M=0; while (x>0){ L=L+1; if M < x%10 { M = x%10 } x= x/10; } printf("%d\n%d", L, M); } | алг нач цел x, L, M ввод x L:=0; M:=0 нц пока x>0 L:=L+1 если M < mod(x,10) то M:= mod(x,10) все x:=div(x,10) кц вывод L, нс, M кон |
Решение: Разберемся, что означают переменные x, L, M. При инициализации x – исходное натуральное число; L=0, M=0. Посмотрим, что происходит при выполнении основного цикла.
нц пока x>0 L:=L+1 если M < mod(x,10) то M:= mod(x,10) все x:=div(x,10) кц Значение L при каждом выполнении цикла увеличивается на 1, значит итоговое значение переменной L равно количеству выполнений цикла. От числа x при каждом выполнении цикла «отбрасывается» последняя цифра (операция x:=div(x,10) ). Таким образом, количество выполнений цикла (оно же – итоговое значение переменной L) равно количеству цифр в исходном числе x. Значение переменой M сравнивается с выражением mod(x,10). Это - последняя цифра текущего значения x, т.е. очередная цифра исходного числа. Если эта цифра больше M, то значение M устанавливается равным этой цифре. Поэтому, итоговое значение переменной M равно максимальной цифре исходного числа.Таким образом, в задаче требуется найти наибольшее трехзначное число, в котором нет цифр больших, чем 7. Это число – 777.Ответ: 777 Замечание [Лещинер и др. Оптимальный банк заданий для подготовки учащихся. Информатика 2012. Интеллект-центр. М. 2012].Пусть в текстах программ в предыдущей задаче операторы взятия остатка и целочисленного деления X MOD 10 и X \ 10 ( и их аналоги на Паскале, Си и Алгоритмическом языке) заменены на X MOD 8 и X \ 8 соответственно. Как и в рассмотренной задаче из демо-варианта требуется указать наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 7.Решение: Для этого случая справедливы все приведенные выше рассуждения, если считать, что число x записано в восьмеричной системе счисления. Поэтому, чтобы получить ответ в десятичной системе, нужно результат 7778 перевести из восьмеричной системы в десятичную. 7778 = 7*64 + 7*8 + 7 = 7*(64+8+1) = 7*73 = 511
Ответ: 511.
2 комментария
В записи условия задачи на Бейсике исправьте, пожалуйста, 2 строки:
INPUT X (убрать скобки) и
IF M < (X MOD 10) THEN (добавить THEN)
Спасибо! Исправил.