Задание №17

ЕГЭ-2023. Задание № 17

Тема: Умение составить алгоритм обработки числовой последовательности и записать его в виде простой программы (10–15 строк) на языке программирования. Время выполнения 14 минут.

Решение задания № 17 ЕГЭ-2023. Демо.

Условие задачи (файл к задаче - в архиве на главной странице Разбор заданий ЕГЭ

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите количество пар последовательности, в которых только одно число оканчивается на 3, а сумма квадратов элементов пары не меньше квадрата максимального элемента последовательности, оканчивающегося на 3. В ответе запишите два числа: сначала количество найденных пар, затем максимальную из сумм квадратов элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Решение я.п. Python:

with open('17.txt','r') as fi:

              sp=[int(i) for i in fi]

mx=0

for i in range(len(sp)):

              if abs(sp[i])%10==3: mx=max(mx,sp[i]**2)

cnt=0

m=0

for i in range(1,len(sp)):

              if abs(sp[i])%10 != abs(sp[i-1])%10 and (abs(sp[i])%10==3 or abs(sp[i-1])%10==3):

                            if (sp[i]**2 + sp[i-1]**2)>=mx:

                                          cnt +=1

                                          m = max(m,sp[i]**2+sp[i-1]**2)

print(cnt,m)

Ответ: 180 | 190360573

решение я.п. PascalABC.net

я.п. PascalABC.net:

uses School;

begin

  var mx:=-MaxInt;

  var fi,fo:text;

  assign(fi,'17.txt');

  reset(fi);

  var ms:=new List<integer>; 

  while seekEof(fi)=False do

  begin

    var ch: integer;

    readln(fi,ch);

    ms.add(ch);

    if (ch mod 10 = 3) and (ch>mx) then

      mx:=ch;

  end;

  fi.close;

  var mm:=mx*mx;

  var a:=ms.Select(x->x).ToArray;

  var l:=length(a)-1;

  var k:=0;

  for var i:=1 to l do

    begin

      if (abs(a[i-1])mod 10=3)<>(abs(a[i]) mod 10=3) then

            if (a[i-1]*a[i-1] + a[i]*a[i]) >= mx*mx then

                        begin

                        k +=1;

                        mm:=max(mm,a[i-1]*a[i-1] + a[i]*a[i]);

                        end;

    end;

  assign(fo,'out.txt');

  rewrite(fo);

  writeln(fo,k,' ',mm);

  fo.close();

end.

Задача 17 ЕГЭ-2024. Демо

В файле (файл возьмите из архива) содержится последовательность натуральных чисел, каждое из которых не превышает 100 000. Определите количество троек элементов последовательности, в которых ровно два из трёх элементов являются трёхзначными числами, а сумма элементов тройки не больше максимального элемента последовательности, оканчивающегося на 13.

Гарантируется, что в последовательности есть хотя бы одно число, оканчивающееся на 13. В ответе запишите количество найденных троек чисел, затем максимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.

Решение.

Алгоритм

1. Найдем максимальный элемент последовательности, который оканчивается на 13. Оформим это отдельной подпрограммой. Одновременно, при чтении числа из файла, будем формировать массив-вектор (я.п. С/С++). Массив-вектор объявляем глобальной переменной.

2. Основной блок программы:

a. Берем по три элемента из массива-вектора, сдвигаясь каждый раз всего на один элемент.

b. Определяем количество трехзначных чисел среди этой тройки и сумму элементов всех трех чисел.

c. Если количество трехзначных чисел в тройке ровно 2, а сумма элементов тройки не превышает  максимального значения – подсчитываем количество таких троек (увеличиваем счетчик троек чисел на 1).

Код программы я.п. Python:

with open('17_2024.txt') as fi:

              sp=[int(i) for i in fi]

mx=0

for i in range(len(sp)):

              if sp[i]%100 == 13: mx=max(mx,sp[i])

my_set = set()

for i in range(100,1000,1):

              my_set.add(i)

number = 0

sumtr = 0

for i in range(0,len(sp)-2):

              sum = 0

              cnt = 0

              for j in range(i,i+3):

                            if sp[j] in my_set: cnt +=1

                            sum +=sp[j]

              if cnt ==2 and sum<=mx:              

                             number +=1

                             sumtr = max(sumtr,sum)

print(number,sumtr)

Ответ: 959 || 97471

Рассмотрим решение нескольких задач этой группы.

Задача 1. файл для решения

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

Например, для последовательности из шести элементов: 6; 4; 9; –3; 6; 2 ответ: 3 8.

Решение я.п. Python:

with open('17-02.txt','r') as fi:

            sp = [int(i) for i in fi]

cnt = 0

mx = 0

for i in range(1,len(sp)):

              if sp[i-1]%4!=0 and sp[i]%4!=0:

                            cnt +=1

                            mx = max(mx,sp[i-1]+sp[i])

print(cnt, mx)

решение я.п. С/С++ и PascalABC.net

Ответ: 2855 | 19635

я.п. PascalABC.net:

uses School;

begin

  var cnt:=0;

  var fi,fo: text;

  var sp:=new List<integer>;

  assign(fi,'17-02.txt');

  reset(fi);

  repeat

    var ch:=readInteger(fi);

    sp.Add(ch);

  until seekeof(fi)=true;

  fi.close();

  var ln:=sp.Count;

  var mx:=-maxInt;

  for var i:=1 to ln do

    begin

    if not sp[i-1].Divs(4) and not sp[i].Divs(4) then

      begin

      cnt +=1;

      mx:=max(mx,sp[i-1]+sp[i]);

      end;

      end;

   println(cnt,mx);   

end.

Задача 2.

Рассматривается множество целых чисел, принадлежащих числовому отрезку [1157; 9931], которые делятся на 2 и не делятся на 3, 7, 8, 11.

Найдите количество таких чисел и 30-е число в этом множестве, если считать их по порядку, с конца (считая, что элементы множества расставлены по возрастанию).

В ответе запишите два целых числа: сначала количество, затем 30-е с конца число множества.

Для выполнения этого задания можно написать программу или воспользоваться редактором электронных таблиц.

Решение.

Решение я.п. Python:

sp = []

for i in range(1157,9932):

              if i%2==0 and i%3!=0 and i%7!=0 and i%8!=0 and i%11!=0:

                            sp.append(i)

ln = len(sp)

k30 = sp[ln-30]

print(ln,k30)

ответ и решение я.п. PascalABC.net; C/C++

Ответ: 1706 ; 9770

я.п. PascalABC.net:

uses School;

begin

  var sp:=new List<integer>;

  for var i:=1157 to 9931 do

  begin

    if i.Divs(2) and not i.DivsAny(3, 7, 8, 11) then

      sp.Add(i);

  end;

  var ln:=sp.Count;

  var k30:=sp[ln-30];

  println(ln,k30);

end.

я.п. C/C++:

#include <bits/stdc++.h>

using namespace std;


int main()

{

    vector<int> mv;

    int l;

    for(int i=1157;i<9932;i++)

    if(i%2==0){

        if(i%3!=0 && i%7!=0 && i%8!=0 && i%11!=0)

            mv.push_back(i);

    }

    l = mv.size();

    cout<<mv.size()<<' '<<mv[l-30]<<endl;

    return 0;

}

Задача 3.

Рассматривается множество целых чисел, принадлежащих числовому отрезку [1425; 9605], которые делятся на 3 или на 4 и не делятся на 5, 7, 9.

Найдите сотое по порядку такое число и количество не таких чисел на этом отрезке.

В ответе запишите два целых числа: сначала сотое такое число, затем количество не таких чисел.

Решение:

я.п. Python:

sp =[]

for i in range(1425,9606):

              if (i%3==0 or i%4==0) and i%5!=0 and i%7!=0 and i%9!=0:

                            sp.append(i)

ln = len(sp)

k100 = sp[99]

print(k100,(9605-1425+ 1) - ln)

ответ и решение я.п. PascalABC.net  и С/С++

1797 | 6000

я.п. PascalABC.net:

uses School;

begin

var sp:=new List<integer>;

for var i:=1425 to 9605 do

  if (i.Divs(3) or i.Divs(4)) and not i.DivsAny(5, 7, 9) then

    sp.Add(i);

var ln:=sp.Count;

var k100:=sp[99];

println(k100,(9605-1425)+1-ln);

end.

Задача 4.

Рассматривается множество целых чисел, принадлежащих числовому отрезку [1213; 8685], у которых первые две цифры совпадают с последними двумя и которые не делятся на 13, 17, 19.

Найдите минимальное такое число и максимальную длину последовательности не таких чисел на этом отрезке.

В ответе запишите два целых числа: сначала минимальное число, затем максимальную длину последовательности не таких.

Решение.

Решение я.п. Python:

cnt = 0

mn = 10**5

t=True

mx = 0

for i in range(1213,8685):

              if (i//100 == i%100) and i%13!=0 and i%17!=0 and i%19!=0:

                            if t:

                                   mn = i

                                   t = False

                            if cnt!=0:

                                   mx = max(mx,cnt)

                                   cnt = 0

              else:

                            cnt +=1;

print(mn,mx)

ответ и решение я.п. PascalABC.net и С/С++

1414 | 302

я.п. PascalABC.net:

uses School;

begin

  var mn:= 10 ** 5;

  var t:=true;

  var cnt:=0;

  var mx:=0;

  for var i:=1213 to 8685 do

  begin

    if ((i div 100) = (i mod 100)) and not i.DivsAny(13, 17, 19) then

    begin

      if t then

        begin

        mn:=min(mn,i);

        t:=false;

        end;

      if cnt<>0 then

        begin

        mx:=max(mx,cnt);

        cnt:=0;

        end;

    end

    else

      cnt +=1;

  end;

  println(mn,mx);

end.

Задача 5 файл для решения

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

Например, для последовательности из шести элементов: 6; 5; 9; –3; 6; 2 ответ: 2 9.

Решение:

Только одна особенность: перебирать числа, начиная с третьего элемента! И все.

я.п. Python:

cnt = 0

mx = 0

with open('17-03.txt','r') as fi:

              sp =[int(i) for i in fi]

ln = len(sp)

for i in range(2,ln):

              if sp[i-2]%10!=5 and sp[i-1]%10!=5 and sp[i]%10!=5:

                            cnt +=1;

                            mx = max(mx,max(sp[i],max(sp[i-1],sp[i-2])))

print(cnt,mx)

ответ и решение я.п. PascalABC.net, С/С++

36519992

я.п. PascalABC.net:

uses School;

begin

  var cnt:=0;

  var mx:=-maxInt;

  var fi,fo: text;

  var sp:=new List<integer>;

  assign(fi,'17-03.txt');

  reset(fi);

  repeat

    var ch := ReadInteger(fi);

    sp.Add(ch)

  until seekEof(fi)=true;

  fi.close();

  var ln:=sp.Count;

  for var i:=2 to ln-1 do

     begin

     if (abs(sp[i-2]) mod 10<>5) and (abs(sp[i-1]) mod 10<>5) and (abs(sp[i]) mod 10<>5) then

       begin

       cnt +=1;

       mx:=max(mx,max(sp[i],max(sp[i-1],sp[i-2])));

       end;

     end;

  assign(fo,'out-03.txt');

  rewrite(fo);

  println(fo,cnt,mx);

  fo.Close();

end.

Задача 6. файл для решения

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите количество пар последовательности, в которых элементы отличаются друг от друга не менее чем на 2000, оба элемента не делятся на 3,  и при этом оба элемента пары больше среднего арифметического четных элементов последовательности.

В ответе запишите количество найденных пар, а затем наибольший нечетный элемент таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Например, для последовательности из шести элементов: 6; 2501; 8; –3; 11; 3001 ответ: 2 3001.

Решение:

В этой задаче много условий, которые мы разложим по полочкам:

Решение я.п. Python:

def f(a,b):

              if a%2!=0 and b%2!=0:

                            if a>b: return a

                            else: return b

              if (a%2!=0 and b%2==0): return a

              if (a%2==0 and b%2!=0): return b

              if (a%2==0 and b%2==0): return 0

cnt = 0

mx = 0

with open('17-19.txt','r') as fi:

              sp=[int(i) for i in fi]

sp_odd = list(filter(lambda x: x%2==0,sp))

s,k = sum(sp_odd),len(sp_odd)

sr = s/k

for i in range(1,len(sp)):

              if (sp[i-1]%3!=0 and sp[i]%3!=0) and (sp[i-1]>sr \

                 and sp[i]>sr) and abs(sp[i] - sp[i-1])>=2000:

                            cnt +=1

                            m = f(sp[i-1],sp[i])

                            mx = max(mx,m)

                            

print(cnt,mx)

ответ и решения я.п. PascalABC.net, С/С++

365 | 9995

я.п. PascalABC.net:


Задачи для самостоятельного решения

Задача 1.с

Рассматривается множество целых чисел, принадлежащих числовому отрезку [1574; 9426], которые делятся на 11 и не делятся на 2, 5, 17, 33.

Найдите сумму таких чисел и наибольшую длину последовательности последовательных чисел этого отрезка, которые не принадлежат множеству.

В ответе запишите два целых числа: сначала сумму, затем максимальную длину последовательности не таких чисел.

ответ

973511 | 109

Задача 2.с

Рассматривается множество целых чисел, принадлежащих числовому отрезку [1079; 9895], которые делятся на 14, не оканчиваются на 2 и на 6, и не делятся на 5 и 28.

Найдите максимальное такое число и наименьшее в самой длинной последовательности не таких (если самых длинных последовательностей несколько, найти наименьшее среди них).

В ответе запишите два целых числа: сначала максимальное, затем наименьшее в самой длинной последовательности не таких.

ответ

9814 | 1135

Задача 3.с

Рассматривается множество целых чисел, принадлежащих числовому отрезку [1422; 9428], у которых первая цифра совпадает с последней, которые делятся на 7 и не делятся на 11, 15, 23.

Найдите максимальное такое число и среднее арифметическое не таких чисел. В ответе запишите два целых числа: сначала максимальное, затем целую часть среднего арифметического не таких чисел.

ответ

9359 | 5425

Задача 4.с файл для решения

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

В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности. Например, для последовательности из шести элементов: 4; 2; 8; –3; 6; 2 ответ: 3 6.

ответ

4322 | 9898

Задача 5.с

Рассматривается множество целых чисел, принадлежащих числовому отрезку [1122; 9420], которые оканчиваются на 1 или на 7 и не делятся на 3, 17, 23.

Найдите количество тех из них, у которых число, составленное из последних двух цифр, больше 50 и минимальную длину последовательности чисел, не удовлетворяющих основному условию.

В ответе запишите два целых числа: сначала количество, затем минимальную длину последовательности не таких.

Для выполнения этого задания можно написать программу или воспользоваться редактором электронных таблиц.

ответ

495 | 3

Задача 6.с файл для решения

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 1 до 10 000 включительно.

Определите количество пар последовательности, в которых хотя бы одно число делится на минимальный элемент последовательности, а сумма элементов пары меньше среднего арифметического элементов, кратных 4. Гарантируется, что в последовательности есть хотя бы одно число, кратное 4. В ответе запишите два числа: сначала количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумеваются два идущих подряд элемента последовательности.

ответ

1428; 829

Задача 7.с (Крылов С.С., Чуркина Т.Е., 2024, в-1) файл для решения

В файле содержится последовательность натуральных чисел. Элементы последовательности могут принимать целые значения от 1 до 100000 включительно.

Определите количество троек элементов последовательности, в которых только одно из чисел является двухзначным, а сумма элементов тройки меньше минимального элемента последовательности, оканчивающегося на 25. В ответе запишите количество найденных троек последовательности, затем максимальную из сумм элементов таких троек.

В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.

Ответ:

247  41

Задача 8.с (Евич Л.Н., 2023, в-2) файл для решения

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 1 до 10 000 включительно.

Определите количество пар последовательности, в которых хотя бы одно число является делителем максимального элемента последовательности, а сумма элементов пары больше, чем среднее арифметическое элементов, оканчивающихся на 3. Гарантируется, что в последовательности есть хотя бы одно число, оканчивающееся на 3. В ответе запишите два числа: сначала количество найденных пар, затем минимальную из сумм элементов, таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Ответ

72 795

Задача из 2306 варианта (автор О.Богданов) файл для решения

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

В ответе запишите количество найденных пар, затем минимальную из сумм элементов таких пар.

В данной задаче под симметричной парой подразумеваются элементы, равноудаленные от центра последовательности. Например, 1-й и последний или 2-й и предпоследний элементы.

ответ

111  138

Решение заданий № 17 ЕГЭ прошлых лет

Решение задачи средствами электронных таблиц.

Решение задачи языком программирования смотрите ниже.

Решение я.п. С++:#include <bits/stdc++.h>#define a 1016#define b 7937
using namespace std;
int main(){   int i, k=0, mx=0;    i = a;     while(i<=b){        if(i%3==0&&i%27!=0){            if(i%7!=0&&i%17!=0&&i%19!=0){                ++k;                if(i>mx)                    mx = i;            }        }        ++i;     }     cout<<k<<' '<<mx;    return 0;}
Решение я.п. Pascal:{$APPTYPE CONSOLE}
uses  SysUtils;const a=1016;      b=7937;var i, k, mx: Integer;begink:=0; mx:=0; i:=a;  while i<=b do begin   if (i mod 3 =0) and (i mod 27 <> 0) then         if (i mod 7 <>0) and (i mod 17 <> 0) and (i mod 19 <> 0) then begin           Inc(k);            if i>mx then               mx:=i;         end;    Inc(i);  end;  Writeln(k,' ',mx);end.