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

Ниже на пяти язы­ках про­грам­ми­ро­ва­ния за­пи­сан ал­го­ритм. По­лу­чив на вход на­ту­раль­ное де­ся­тич­ное число x, этот ал­го­ритм пе­ча­та­ет два числа: L и M. Ука­жи­те наи­боль­шее число x, при вводе ко­то­ро­го ал­го­ритм пе­ча­та­ет сна­ча­ла 21, а потом 3.

 

Бей­сикPython

DIM X, L, M AS INTEGER

INPUT X

L = 1

M = 0

WHILE X > 0

    M = M + 1

     IF X MOD 2 <> 0 THEN

      L = L * (X MOD 8)

     END IF

X = X \ 8

WEND

PRINT L

PRINT M

x = int(input())

L = 1

M = 0

while x > 0:

     M = M + 1

     if x % 2 != 0:

          L = L * (x % 8)

     x = x // 8

print(L)

print(M)

Пас­кальАл­го­рит­ми­че­ский язык

var x, L, M: integer;

begin

     readln(x);

     L := 1;

     M := 0;

     while x>0 do

    begin

         M :=M+1;

         if x mod 2 <> 0 then

            L := L * (x mod 8);

         x := x div 8;

    end;

    writeln(L)

    writeln(M)

end.

алг

нач

     цел x, L, M

     ввод x

     L := 1

     M := 0

    нц пока x > 0

        M := M + 1

         если mod(x,2) <> 0

            то

             L := L * mod(x,8)

        все

        x := div(x,8)

     кц

     вывод L, нс, M

кон

Си++

#include <iostream>

using namespace std;

 

int main(){

     int x, L, M;

     cin >> x;

     L = 1;

     M = 0;

     while (x > 0) {

          M = M + 1;

          if(x % 2 != 0) {

             L = L * (x % 8);

          }

          x = x / 8;

        }

        cout << L << endl << M << endl;

        return 0;

}

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

Ре­ше­ние.

За­ме­тим, что M = 3, это зна­чит, что число x долж­но 3 раза по­де­лить­ся на 8 c остат­ком. Сле­до­ва­тель­но, вво­ди­мое число долж­но быть трёхзнач­ным.

Не­об­хо­ди­мо по­лу­чить трёхзнач­ное вось­ме­рич­ное число, у ко­то­ро­го про­из­ве­де­ние цифр двух раз­ря­дов равно 21. Сле­до­ва­тель­но, по­сколь­ку не­об­хо­ди­мо найти наи­боль­шее воз­мож­ное число x, у ко­то­ро­го про­из­ве­де­ние цифр двух раз­ря­дов равно 21, число x долж­но вы­гля­деть так 7638 = 49910.

 

Ответ: 499.

 

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

for i in range(10000, 0, -1):

x = i

L = 1

M = 0

while x > 0:

M = M + 1

if x % 2 != 0:

L = L * (x % 8)

x = x // 8

if M == 3 and L == 21:

print(i)

break

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ—2019 по ин­фор­ма­ти­ке
Раздел кодификатора ФИПИ: