Ниже записана программа. Получив на вход число x , эта программа печатает два числа, L и M. Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 7.
| Бэйсик | Паскаль |
|---|---|
DIM X, L, M AS INTEGER INPUT X L=0: M=0 WHILE X > 0 L = L+1 M = M +(X MOD 10) 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; M:=M + (x mod 10); x:=x div 10; end; writeln(L); write(M); end. |
| Си++ | Алгоритмический |
#include <iostream> using namespace std; int main() { int x, L, M; cin >> x; L=0; M=0; while (x>0){ L = L+1; M = M +(x%10); x = x/10; } cout << L << endl << M endl; } | алг нач цел x, L, M ввод x L:=0; M:=0 нц пока x>0 L:=L+1 M:=M+mod(x,10) x:=div(x,10) кц вывод L, нс, M кон |
| Python | |
x = int(input()) L = 0 M = 0 while x > 0: L += 1 M += x % 10 x = x // 10 print(L) print(M)
| |
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом цифр в x. Для того, чтобы L стало L=3, x должно быть трёхзначным.
Теперь рассмотрим оператор изменения M:
M:= M + x mod 10;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра x. Таким образом, М есть сумма цифр числа x.
Представим 7 в виде суммы: 7 = 7 + 0 + 0 = 1 + 6 + 0 = 1 + 5 + 1 = 1 + 4 + 2 = 1 + 3 + 3 и т. д. Видно, что мы не можем использовать цифры больше 7, поэтому для получения максимального числа используем представление 7 = 7 + 0 + 0.
Из этих цифр составим наибольшее число: 700.
Ответ: 700.
Приведём другое решение на языке Python.
for i in range(10000, 1, -1):
x = i
L = 0
M = 0
while x > 0:
L += 1
M += x % 10
x = x // 10
if L == 3 and M == 7:
print(i)
break

