Ниже на четырёх языках программирования записана программа, которая вводит натуральное число x, выполняет преобразования, а затем выводит результат. Укажите наименьшее значение x, при вводе которого программа выведет число 20.
| C++ | Python |
|---|---|
#include <iostream> using namespace std;
int main() { int x, a, b; cin >> x; a = 3*x + 23; b = 3*x – 17; while (a != b) { if (a > b) a -= b; else b -= a; } cout << a << endl; return 0; }
| x = int(input()) a = 3*x + 23 b = 3*x - 17 while a != b: if a > b: a -= b else: b -= a print(a)
|
| Паскаль | Алгоритмический язык |
var x, a, b: integer; begin readln(x); a := 3*x + 23; b := 3*x – 17; while a <> b do begin if a > b then a := a – b else b := b - a end; writeln(a) end.
| алг нач цел x, a, b ввод x a := 3*x + 23 b := 3*x – 17 нц пока a <> b если a > b то a := a – b иначе b := b - a все кц вывод a, нс кон |
Режим задачу с помощью языка PascalABC перебором. Ниже приведена программа для решения этой задачи. Заметим, что если начинать перебор с единицы, то выполнение программы будет зависать из-за наличия отрицательных чисел. Необходимо начинать перебор с числа, которое в результате умножения на три будет больше 17, такое число — 6.
var
x, a, b, i: integer;
begin
for i := 6 to 1000 do begin
x := i;
a := 3 * x + 23;
b := 3 * x - 17;
while a <> b do begin
if a > b then
a := a - b
else
b := b - a;
end;
if (a = 20) then begin
writeln(i);
break;
end;
end;
end.
В результате работы программы получаем ответ — 39.
Ответ: 39.
Приведём другое решение на языке Python.
for i in range(6, 10000):
x = i
a = 3 * x + 23
b = 3 * x - 17 # начинаем с 6, чтобы переменная b > 0, иначе не попасть на else
while a != b:
if a > b:
a -= b
else:
b -= a
if a == 20:
print(i)
break

