Ниже на пяти языках программирования записан алгоритм. Получив на вход число x, этот алгоритм печатает число M. Известно, что x > 150. Укажите наименьшее такое (т. е. большее 150) число x, при вводе которого алгоритм печатает 30.
| Бейсик | Python |
|---|---|
DIM X, L, M AS INTEGER INPUT X L = 2*X-30 M = 2*X+30 WHILE L <> M IF L > M THEN L = L - M ELSE M = M - L END IF WEND PRINT M
| x = int(input()) L = 2*x-30 M = 2*x+30 while L != M: if L > M: L = L - M else: M = M - L print(M)
|
| Паскаль | Алгоритмический язык |
var x, L, M: integer; begin readln(x); L := 2*x-30; M := 2*x+30; while L <> M do begin if L > M then L := L - M else M := M - L; end; writeln(M); end.
| алг нач цел x, L, M ввод x L := 2*x-30 M := 2*x+30 нц пока L <> M если L > M то L := L - M иначе M := M - L все кц вывод M кон |
| Си++ | |
#include <iostream> using namespace std; int main() { int x, L, M; cin >> x; L = 2*x-30; M = 2*x+30; while (L != M) { if (L > M) L = L - M; else M = M - L; } cout « M « endl; return 0; }
| |
Пока L !=M, вычитаем из большего меньшее. Первое действие 2*x + 30 − (2*x − 30), и тогда M станет равно 60. Далее (т. к. 2*x − 30 > 60 по условию) L станет равно 2*x − 90. Далее имеем 2*x − 150, 2*x − 210, 2*x − 270. Теперь L возможно станет меньше M. Поскольку M должно быть 30, значит, 2*x − 270 = 30, тогда x = 150, что не подходит по условию. Значит, 2*x − 330 = 30, т. е. x = 180.
Ответ: 180.
Приведём другое решение на языке Python.
for i in range(151, 1000):
x = i
L = 2 * x - 30
M = 2 * x + 30
while L != M:
if L > M:
L = L - M
else:
M = M - L
if M == 30:
print(i)
break

