Ниже на пяти языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: a и b. Укажите наименьшее из таких чисел x, при вводе которого алгоритм печатает сначала 3, а потом 12.
| Бейсик | Паскаль |
|---|---|
DIM X, A, B AS INTEGER INPUT X A=0: B=0 WHILE X > 0 A = A+1 B = B +(X MOD 10) X = X \ 10 WEND PRINT A PRINT B | var x, a, b: integer; begin readln(x); a:=0; b:=0; while x>0 do begin a:=a + 1; b:=b + (x mod 10); x:=x div 10; end; writeln(a); write(b); end. |
| Си++ | Алгоритмический |
#include <iostream> using namespace std; int main() { int x, a, b; cin >> x; a=0; b=0; while (x>0){ a = a+1; b = b +(x%10); x = x/10; } cout << a << endl << b endl; } | алг нач цел x, a, b ввод x a:=0; b:=0 нц пока x>0 a:=a+1 b:=b+mod(x,10) x:=div(x,10) кц вывод a, нс, b кон |
| Python | |
x = int(input()) a = 0 b = 0 while x > 0: a += 1 b +=x % 10 x //= 10 print(a) print(b)
| |
Значение в переменной a после выполнения цикла равно количеству выполненных циклов. Поскольку требуется, чтобы программа напечатала сначала число 3, цикл должен выполниться три раза. Оператор div оставляет только целую часть от деления, следовательно, искомое число должно два раза делиться на 10 так, чтобы остаток был не меньше десяти, то есть быть трёхзначным.
В переменной b накапливается сумма цифр искомого трёхзначного числа. Таким образом, необходимо найти наименьшее трёхзначное число, сумма цифр которого равна 12. Это число 129.
Ответ: 129.
Приведём другое решение на языке Python.
for i in range(10000):
x = i
a = 0
b = 0
while x > 0:
a += 1
b += x % 10
x //= 10
if a == 3 and b == 12:
print(i)
break

