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

Опре­де­ли­те, при каком наи­мень­шем введённом зна­че­нии пе­ре­мен­ной s про­грам­ма вы­ве­дет число 60. Для Ва­ше­го удоб­ства про­грам­ма пред­став­ле­на на четырёх язы­ках про­грам­ми­ро­ва­ния.

 

PythonСи++

s = int(input())

s = (s + 1) // 7

n = 36

while s < 2050:

    s = s * 2

    n = n + 3

print(n)

#include <iostream>

using namespace std;

int main()

{

    int s;

    cin >> s;

    s = (s + 1) / 7;

    int n = 36;

    while (s < 2050) {

        s = s * 2;

        n = n + 3;

    }

    cout << n << endl;

    return 0;

}

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

var s, n: integer;

begin

    readln(s);

    s := (s + 1) div 7;

    n := 36;

    while s < 2050 do

    begin

        s := s * 2;

        n := n + 3

    end;

    writeln(n)

end.

алг

нач

    цел n, s

    ввод s

    s := div(s + 1, 7)

    n := 36

    нц пока s < 2050

        s := s * 2

        n := n + 3

    кц

    вывод n

кон

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

Ре­ше­ние.

За­ме­тим, что чтобы про­грам­ма вы­ве­ла число 60, к числу N  =  36 долж­но при­ба­вить­ся 24, т. е. цикл дол­жен вы­пол­нить­ся 8 раз. По­сколь­ку в каж­дой ите­ра­ции цикла число s умно­жа­ет­ся на 2, будем рас­смат­ри­вать сте­пе­ни двой­ки. Бли­жай­шее к 2050 число, яв­ля­ю­ще­е­ся 2 в n-ной сте­пе­ни  — 2048  =  211.

Число s + 1 в ре­зуль­та­те це­ло­чис­лен­но­го де­ле­ния на 7 долж­но да­вать ре­зуль­тат >8. Зна­чит, наи­мень­шее воз­мож­ное вход­ное число s  — 62.

 

Ответ: 62.

 

При­ве­дем ре­ше­ние Ми­ха­и­ла Глин­ско­го.

За­ме­тим, что зна­че­ние пе­ре­мен­ной s долж­но быть не мень­ше 6, по­сколь­ку иначе после вы­пол­не­ния ко­ман­ды s := (s + 1) div 7 по­лу­чит­ся 0, что при­ве­дет к за­цик­ли­ва­нию. Со­ста­вим про­грам­му на языке Пас­каль для пе­ре­бо­ра зна­че­ний s в по­ряд­ке воз­рас­та­ния и вы­ве­дем пер­вое под­хо­дя­щее зна­че­ние:

var s,i, n: integer;

begin

for i := 6 to 1000 do begin

  s := i;

  s := (s + 1) div 7;

  n := 36;

  while s < 2050 do begin

    s := s * 2;

    n := n + 3

    end;

  if n = 60 then begin

    writeln(i); break;

    end;

  end;

end.

 

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

def p(s):

s = (s + 1) // 7

n = 36

while s < 2050:

s = s * 2

n = n + 3

return n

 

t=6

while True:

if p(t)==60:

print(t)

break

t+=1

 

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

for i in range(6, 10000): # на­чи­на­ем с 6, так как при мень­шем зна­че­ние s про­ис­хо­дит за­цик­ли­ва­ние

s = i

s = (s + 1) // 7

n = 36

while s < 2050:

s = s * 2

n = n + 3

if n == 60:

print(i)

break

Раздел кодификатора ФИПИ: 1.7.2 Ос­нов­ные кон­струк­ции языка про­грам­ми­ро­ва­ния. Си­сте­ма про­грам­ми­ро­ва­ния