Задания
Версия для печати и копирования в MS Word
Тип Д22 № 13577
i

Ниже на пяти язы­ках про­грам­ми­ро­ва­ния за­пи­сан ал­го­ритм. По­лу­чив на вход число x, этот ал­го­ритм пе­ча­та­ет число M. Из­вест­но, что x > 100. Ука­жи­те наи­мень­шее такое (т. е. боль­шее 100) число 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;

}

Спрятать решение

Ре­ше­ние.

В теле цикла числа M и L умень­ша­ют­ся, пока не ста­нут рав­ны­ми. На пер­вом шаге ал­го­рит­ма M = 60, на вто­ром L = 2*x − 90. Далее L = 2*x − 150, 2*x − 210. На дан­ном шаге M и L могут стать рав­ны­ми так, чтобы x был боль­ше ста, про­ве­рим: 2*x − 210 = 30, от­ку­да x равно 120.

 

Ответ: 120.

 

При­ведём дру­гое ре­ше­ние на языке Python.

for i in range(100, 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

Раздел кодификатора ФИПИ: