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

В файле со­дер­жит­ся по­сле­до­ва­тель­ность на­ту­раль­ных чисел. Эле­мен­ты по­сле­до­ва­тель­но­сти могут при­ни­мать целые зна­че­ния от 1 до 100 000 вклю­чи­тель­но. Опре­де­ли­те ко­ли­че­ство пар по­сле­до­ва­тель­но­сти, в ко­то­рых хотя бы одно число де­лит­ся на ми­ни­маль­ный эле­мент по­сле­до­ва­тель­но­сти, крат­ный 21. Га­ран­ти­ру­ет­ся, что такой эле­мент в по­сле­до­ва­тель­но­сти есть. В от­ве­те за­пи­ши­те ко­ли­че­ство най­ден­ных пар, затем мак­си­маль­ную из сумм эле­мен­тов таких пар. В дан­ной за­да­че под парой под­ра­зу­ме­ва­ет­ся два иду­щих под­ряд эле­мен­та по­сле­до­ва­тель­но­сти.

За­да­ние 17

Ответ:

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

Ре­ше­ние.

Будем по­сле­до­ва­тель­но счи­ты­вать числа из файла. Пройдём по всем чис­лам из файла два раза. В пер­вый про­ход найдём ми­ни­маль­ный эле­мент по­сле­до­ва­тель­но­сти, крат­ный 21. Во вто­рой про­ход для каж­дой пары (двух под­ряд иду­щих эле­мен­тов) будем про­ве­рять, де­лит­ся ли хотя бы одно число из пары на ми­ни­маль­ный эле­мент по­сле­до­ва­тель­но­сти, крат­ный 21. При успеш­ном вы­пол­не­нии усло­вия будем уве­ли­чи­вать зна­че­ния счётчика count и про­ве­рять, боль­ше ли сумма эле­мен­тов пары те­ку­щей мак­си­маль­ной суммы. Если сумма эле­мен­тов пары боль­ше те­ку­щей мак­си­маль­ной суммы, будем об­нов­лять зна­че­ние пе­ре­мен­ной maxsum.

 

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

var

x, y, count: longint;

maxsum, minelem: longint;

f: text;

begin

assign(f,'C:\17.txt');

reset(f);

minelem := 100001;

while not eof(f) do begin

readln(f, x);

if (x mod 21 = 0) and (x < minelem) then minelem := x;

end;

close(f);

reset(f);

readln(f, x);

maxsum := -20001;

count := 0;

while not eof(f) do begin

readln(f, y);

if (x mod minelem = 0) or (y mod minelem = 0) then begin

count := count + 1;

if x + y > maxsum then maxsum := x + y;

end;

x := y;

end;

writeln(count, ' ', maxsum);

end.

 

В ре­зуль­та­те ра­бо­ты дан­но­го ал­го­рит­ма при вводе дан­ных из файла ответ  — 126 171120.

 

При­ме­ча­ние.

Путь к файлу не­об­хо­ди­мо ука­зать со­глас­но рас­по­ло­же­нию файла на Вашем ком­пью­те­ре.

 

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

f = open("107_17.txt")

s = f.readlines()

k = 0

min = 10000000

maxi = 0

for i in range(len(s)):

s[i] = int(s[i])

for i in range(len(s)):

if s[i] % 21 == 0 and s[i] < min:

min = s[i]

for i in range(len(s) - 1):

if (s[i] % min == 0) or (s[i + 1] % min == 0):

k += 1

maxi = max(maxi, s[i] + s[i + 1])

print(k, maxi)

 

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

f = [int(i) for i in open("17.txt")]

min_element = min(f, key=lambda x: x if x % 21 == 0 else 100_000)

result = []

for i in range(len(f) - 1):

if f[i] % min_element == 0 or f[i+1] % min_element == 0:

result.append(f[i] + f[i+1])

print(len(result), max(result))

Источник: ЕГЭ по ин­фор­ма­ти­ке 04.04.2022. До­сроч­ная волна