Ниже на четырёх языках программирования записана программа, которая вводит натуральное число x, выполняет преобразования, а затем выводит одно число. Укажите наименьшее возможное значение x, при вводе которого программа выведет числа 5 и 12.
| C++ | Python |
|---|---|
#include <iostream> using namespace std;
int main() { int x, m, s, d; cin >> x; m = 0; s = 0; while (x > 0) { d = x % 8; s += d; if (d > m) m = d; x = x / 8; } cout << m << ' ' << s << endl; return 0; }
| x = int(input()) m = 0 s = 0 while x > 0: d = x % 8 s += d if d > m: m = d x = x // 8 print(m,s)
|
| Паскаль | Алгоритмический язык |
var x, m, s, d: integer; begin readln(x); m := 0; s := 0; while x > 0 do begin d := x mod 8; s := s + d; if d > m then m := d; x := x div 8 end; writeln(m, ' ', s) end.
| алг нач цел x, m, s, d ввод x m := 0 s := 0 нц пока x > 0 d := mod(x,8) s := s + d если d > m то m := d все x := div(x,8) кц вывод m, ' ', s, нс кон |
Режим задачу с помощью языка PascalABC перебором. Ниже приведена программа для решения этой задачи.
var
x, m, s, d, i: integer;
begin
x := 0;
m := 0;
s := 0;
for i := 1 to 1000 do begin
x := i;
while x > 0 do begin
d := x mod 8;
s := s + d;
if d > m then m := d;
x := x div 8;
end;
if (m = 5) and (s = 12) then begin
writeln(i);
break;
end;
m := 0;
s := 0;
end;
end.
В результате работы программы получаем ответ — 173.
Ответ: 173.
Приведём другое решение на языке Python.
for i in range(10000):
x = i
m = 0
s = 0
while x > 0:
d = x % 8
s += d
if d > m:
m = d
x = x // 8
if m == 5 and s == 12:
print(i)
break

