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

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

 

 

Бей­сикPython

DIM X, L, M AS INTEGER

INPUT X

L = 0: M = 1

WHILE X > 0

    L = L + 1

    IF X MOD 2 > 0 THEN

        M = M * (X MOD 8)

    END IF

    X = X \ 8

WEND

PRINT M

PRINT L

 

x = int(input())

l=0

m=1

while x > 0:

    l += 1

    if x%2 > 0:

        m *= x%8

    x = x//8

print(m, l)

 

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

var x, L, M: longint;

begin

    readln(x);

    L := 0; M := 1;

    while x > 0 do begin

        L := L+ 1;

        if x mod 2 <> 0 then

            M := M * (x mod 8);

        x := x div 8;

    end;

    writeln(M); write(L);

end.

 

алг

нач

    цел x, L, M

    ввод x

    L := 0; M := 1

    нц пока x > 0

        L := L + 1;

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

            то M := M * mod(x,8)

        все x := div(x,8)

    кц

    вывод M, нс, L

кон

 

С++

#include <iostream>

using namespace std;

int main()

{

    int x, L, M;

    cin >> x;

    L = 0; M = 1;

    while (x > 0) {

        L++;

        if (x%2 > 0)

            M *= x%8;

        x = x / 8;

    }

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

    return 0;

}

 

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

Ре­ше­ние.

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

Про­из­ве­де­ние не­чет­ных цифр этого числа долж­но быть равно 25. Число 25 можно раз­ло­жить на мно­жи­те­ли толь­ко как 5 · 5, сле­до­ва­тель­но, число долж­но со­дер­жать две цифры 5.

Тре­тья цифра числа либо равна 1, либо чет­ная. Тре­бу­ет­ся найти наи­боль­шее число, по­это­му берем наи­боль­шую чет­ную цифру в вось­ме­рич­ной си­сте­ме  — цифру 6.

Сле­до­ва­тель­но, число долж­но вы­гля­деть так 6558 = 42910.

 

Ответ: 429.

 

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

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

x = i

l = 0

m = 1

while x > 0:

l += 1

if x % 2 > 0:

m *= x % 8

x = x // 8

if m == 25 and l == 3:

print(i)

break

Источник: ЕГЭ по ин­фор­ма­ти­ке 28.05.2018. Ос­нов­ная волна, ва­ри­ант А. Има­е­ва — «Ко­то­лис»
Раздел кодификатора ФИПИ: