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

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

 

Бей­сикПас­каль

DIM X, A, B AS INTEGER

INPUT X

A=0: B=0

WHILE X > 0

    A = A+1

    IF B < (X MOD 8) THEN

        B = X MOD 8

    END IF

    X = X \ 8

WEND

PRINT A

PRINT B

var x, a, b: integer;

    begin

    readln(x);

    a:=0; b:=0;

    while x>0 do

        begin

            a:=a + 1;

            if b < (x mod 8)

            then

                b:=x mod 8;

            x:=x div 8;

        end;

    writeln(a); write(b);

end.

Си++Ал­го­рит­ми­че­ский

#include <iostream>

using namespace std;

int main()

{

    int x, a, b;

    cin >> x;

    a=0; b=0;

    while (x>0){

        a = a+1;

        if (b < (x%8)){

            b = x%8;

        }

        x = x/8;

    }

    cout << a << endl << b << endl;

}

алг

нач

цел x, a, b

ввод x

a:=0; b:=0

нц пока x>0

    a:=a+1

    если b < mod(x,8)

        то

            b:=mod(x,8)

    все

    x:=div(x,8)

кц

вывод a, нс, b

кон

Python

x = int(input())

a = 0

b = 0

while x > 0:

    a += 1

    if (b < (x % 8)):

        b =x % 8

    x //= 8

print(a)

print(b)

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

Ре­ше­ние.

Зна­че­ние в пе­ре­мен­ной a после вы­пол­не­ния цикла равно ко­ли­че­ству вы­пол­нен­ных цик­лов. По­сколь­ку тре­бу­ет­ся, чтобы про­грам­ма на­пе­ча­та­ла сна­ча­ла число 3, цикл дол­жен вы­пол­нить­ся три раза. Опе­ра­тор div остав­ля­ет толь­ко целую часть от де­ле­ния, сле­до­ва­тель­но, ис­ко­мое число долж­но два раза де­лить­ся на 8 так, чтобы целая часть ре­зуль­та­та была по­ло­жи­тель­ной. Сле­до­ва­тель­но, это число долж­но быть не мень­ше числа 64.

В пе­ре­мен­ную b за­пи­сы­ва­ет­ся оста­ток от де­ле­ния числа на 8. По усло­вию тре­бу­ет­ся, чтобы после вы­пол­не­ния цикла пе­ре­мен­ная b имела зна­че­ние 2, т. е. мак­си­маль­ный оста­ток от де­ле­ния на 8 в цикле дол­жен быть равен 2.

Вы­пол­ним про­грам­му для всех чисел, не мень­ших чем 64. Пер­вое число, ко­то­рое удо­вле­тво­рит усло­вию и будет наи­мень­шим. По­сколь­ку про­грам­ма вы­во­дит целые числа и ни­ка­ких дру­гих опе­ра­то­ров к числу, кроме опе­ра­то­ров div и mod, не при­ме­ня­ет­ся, будем рас­смат­ри­вать толь­ко целые числа.

При вводе числа 64 про­грам­ма вы­ве­дет числа 3 и 1. При вводе числа 65 про­грам­ма вы­ве­дет числа 3 и 1. При вводе числа 66 про­грам­ма вы­ве­дет числа 3 и 2. Сле­до­ва­тель­но, ответ 66.

 

Ответ: 66.

 

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

for i in range(1, 1000):

x = i

a = 0

b = 0

while x > 0:

a += 1

if b < (x % 8):

b = x % 8

x //= 8

if a == 3 and b == 2:

print(i)

break


Аналоги к заданию № 6781: 6813 Все

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