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

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

 

PythonСи++

s = int(input())

x = int(input())

s = 100*s + x

n = 1

while s < 2021:

    s = s + 5*n

    n = n + 1

print(n)

#include <iostream>

using namespace std;

int main()

{

    int s, x, n;

    cin >> s >> x;

    s = 100*s + x;

    n = 1;

    while (s < 2021) {

        s = s + 5*n;

        n = n + 1;

    }

    cout << n << endl;

    return 0;

}

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

var s, x, n: integer;

begin

    readln(s, x);

    s := 100*s + x;

    n := 1;

    while s < 2021 do begin

        s := s + 5*n;

        n := n + 1

    end;

    writeln(n)

end.

алг

нач

    цел s, x, n

    ввод s, x

    s := 100*s + x

    n := 1

    нц пока s < 2021

        s := s + 5*n

        n := n + 1

    кц

    вывод n, нс

кон

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

Ре­ше­ние.

Решим за­да­чу с по­мо­щью про­грам­мы ме­то­дом пе­ре­бо­ра. Ниже при­ве­де­на про­грам­ма на языке PascalABC:

var s, n, i, j: integer;

begin

for i := 1 to 300 do begin

for j := 1 to 1000 do begin

n := 1;

s := i;

s := 100*s + j;

while s < 2021 do begin

s := s + 5*n;

n := n + 1

end;

if n = 15 then begin

writeln(j);

break;

end;

end;

end;

end.

После вы­пол­не­ния про­грам­мы наи­мень­шее целое по­ло­жи­тель­ное число, вы­ве­ден­ное на экран, будет равно 1.

 

Ответ: 1.

 

При­ве­дем ана­ли­ти­че­ское ре­ше­ние.

Чтобы про­грам­ма вы­ве­ла 15, цикл дол­жен вы­пол­нить­ся 14 раз. Зна­че­ние пе­ре­мен­ной n, умно­жен­ное на 5, при каж­дом про­хо­де цикла при­бав­ля­ет­ся к пе­ре­мен­ной s, после чего уве­ли­чи­ва­ет­ся на 1. Сле­до­ва­тель­но, к пе­ре­мен­ной s будет при­бав­ле­но число 5 · (1 + 2 + ... + 14)  =  525. По­лу­чив­ше­е­ся зна­че­ние пе­ре­мен­ной s долж­но быть боль­ше или равно 2021, чтобы вы­пол­не­ние цикла за­вер­ши­лось. Сле­до­ва­тель­но, s · 100 + x + 525 ≥ 2021, от­ку­да s · 100 + x ≥ 1496, где s  — вве­ден­ное с кла­ви­а­ту­ры зна­че­ние.

С дру­гой сто­ро­ны, после 13 про­хо­дов цикла зна­че­ние пе­ре­мен­ной s долж­но быть мень­ше 2021, чтобы цикл про­дол­жал­ся. За 13 про­хо­дов цикла будет при­бав­ле­но число 5 · (1 + 2+ ... + 13)  =  455. По­лу­чим не­ра­вен­ство s · 100 + x + 455 < 2021.

Таким об­ра­зом, зна­че­ния вво­ди­мых с кла­ви­а­ту­ры пе­ре­мен­ных s и x долж­ны удо­вле­тво­рять двой­но­му не­ра­вен­ству 1496 ≤ s · 100 + x < 1566. При s  =  14 наи­мень­шее по­ло­жи­тель­ное зна­че­ние x равно 96, а при s  =  15 наи­мень­шее по­ло­жи­тель­ное зна­че­ние x равно 1, сле­до­ва­тель­но, ответ 1.

 

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

for i in range(1, 100):

s = i

for j in range(1, 100):

x = j

s = 100 * s + x

n = 1

while s < 2021:

s = s + 5 * n

n += 1

if n == 15:

print(x)

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