Обработка целочисленной информации егэ информатика

На уроке рассмотрено решение 25 задания ЕГЭ по информатике: дается подробное объяснение и разбор заданий демонстрационных вариантов и досрочных экзаменов

Содержание:

  • Объяснение задания 25 ЕГЭ по информатике
    • Алгоритмизация и программирование
  • Решение 25 заданий ЕГЭ по информатике
    • Делители числа
    • Простые числа
  • Задания прошлых лет для тренировки (до 2021)
    • Задачи с поэлементной обработкой массива
    • Задачи на обработку элементов массива с последующей заменой
    • Задачи на обработку пар элементов массива (два подряд идущих)
    • Задачи на обработку трёх подряд идущих элементов массива (тройки элементов массива)
    • Задачи на поиск максимума, минимума элементов массива и другие
  • Решение 25 заданий ЕГЭ по информатике: более сложные задания

25-е задание: «Программная обработка целочисленной информации»

Уровень сложности

— высокий,

Требуется использование специализированного программного обеспечения

— да,

Максимальный балл

— 2,

Примерное время выполнения

— 20 минут.

  
Проверяемые элементы содержания: Умение создавать собственные программы (10–20 строк) для обработки целочисленной информации

Рекомендации по выполнению:

«В этом задании требуется написать фрагмент программы, реализующий простую обработку целочисленного массива. У экзаменуемых, хорошо освоивших технику программирования, это задание обычно не вызывает серьёзных затруднений, поскольку алгоритм обработки массива не относится к сложным»

Типичные ошибки и рекомендации по их предотвращению:

  • «в цикле происходит выход за границу массива;
  • не инициализируется или неверно инициализируется искомое значение;
  • исходный массив не изменяется;
  • изменяются не все требуемые элементы (например, только первый или последний из них);
  • отсутствует вывод ответа, или ответ выводится не полностью (например, только один элемент массива ввиду пропущенного цикла вывода элементов или операторных скобок);
  • используется переменная, не объявленная в разделе описания переменных;
  • не указано или неверно указано условие завершения цикла»
  • «Часто бывает, что увлекшись написанием решения, экзаменуемый совершает ошибки в простых ситуациях: организация ввода-вывода, описание и инициализация переменных, обработка массива (выход за границу) и т.д. Эти ошибки могут стоить Вам нескольких баллов, старайтесь их не допускать»

    ФГБНУ «Федеральный институт педагогических измерений»

    Алгоритмизация и программирование

    Для решения задания требуется вспомнить темы:

    • Одномерные массивы.
    • Двумерные массивы.

    Решение 25 заданий ЕГЭ по информатике

    Плейлист видеоразборов задания на YouTube:
    Задание демонстрационного варианта 2022 года ФИПИ


    Делители числа

    25_7:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [126849; 126871], числа, имеющие ровно 4 различных делителя.
    Выведите эти четыре делителя для каждого найденного числа в порядке возрастания.

    ✍ Решение:

      ✎ Решение (неоптимизированный вариант, метод полного перебора):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      
      begin
        var divCount := 4;
        for var n := 126849 to 126871 do
        begin
          var divs := new List<integer>; 
          for var d := 1 to n do
            if n mod d = 0 then begin
              divs.Add(d);      
              if divs.Count > divCount then break;
            end;
          if divs.Count = divCount then
          begin
            divs.Sort();
            Println(divs);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      
      for n in range(126849,126871+1):
            divs = [] # чистим список делителей
            for d in range(1,n+1): #
              if n % d == 0:
                divs = divs + [d] # добавляем делитель в список
                if len(divs) > 4: break
            if len(divs) == 4:
              print(*divs)
      С++:

      ✎ Решение (оптимизированный вариант):

    • Будем использовать оптимизированный вариант программы, подходящий для «медленных» компьютеров. Для этого перебор делителей для числа n будем выполнять от 2 до √n, округлив его до ближайшего целого числа (не включая точный квадратный корень, если он существует):
    • вместо диапазона делителей [1; число]
      использовать диапазон [1; округл(√n)]
      
    • При переборе делителей будем определять: если делитель – это точный квадратный корень(n), то в список делителей добавлять будем только сам делитель, если нет – то добавляем пару делителей (делитель и n // делитель):
    • Пример:
      число 8 = 2 * 4
      Достаточно рассмотреть цикл от 2 до округл(√8) (=2)
      если 8 делится на 2 и 8/2 не равно 2, то делители: 2 и 4 (8/2)
      
      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      
      begin
        var divCount := 4;
        for var n := 126849 to 126871 do
        begin
          var divs := new List<integer>;
          var d := 1;
          while d * d <= n do  // можно цикл for var d := 1 to round(sqrt(n)) do
          begin
            if n mod d = 0 then begin
              divs.Add(d);      
              if d * d <> n then 
                divs.Add(n div d);
              if divs.Count > divCount then break;
            end;
            d := d+1;
          end;
          if divs.Count = divCount then
          begin
            divs.Sort();
            Println(divs);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      
      # import math # для квадратного корня числа (sqrt)
      divCount = 4  # нужное количество делителей
      for n in range(126849,126871 + 1):
        divs = [] # чистим список делителей
        d = 1
        #  вместо while можно цикл for d in range(1,round(math.sqrt(n))):
        while d*d <= n: # перебор делителей
          if n % d == 0:
            divs.append(d) # добавляем делитель в список
            if d != n//d: # если делитель - не точный квадратный корень n
              divs.append(n//d)
            if len(divs) > divCount: break
          d+=1
        if len(divs) == divCount:
          divs.sort()
          print(divs)
      С++:

      ✎ Решение: Генерация списка делителей.
      Общая идея:

    • Для каждого числа указанного диапазона генерируем список делителей.
    • Если длина списка равна четырем, выводим его.
    • PascalABC.net:

      Python:

      for n in range(126849, 126871+1):
        divs = [d for d in range(1, n+1) if n % d == 0] 
        if len(divs) == 4:
          print( *divs )
      С++:

    Ответ:

    1 3 42283 126849
    1 47 2699 126853
    1 5 25373 126865
    1 293 433 126869
    

    25_8:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [164700; 164752], числа, имеющие ровно 6 различных делителей.
    Выведите эти делители для каждого найденного числа в порядке возрастания.

    ✍ Решение:

      ✎ Решение (оптимизированный вариант):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      
      begin
        var divCount := 6;
        for var n := 164700 to 164752 do
        begin
          var divs := new List<integer>; 
          for var d := 1 to round(sqrt(n)) do
            if n mod d = 0 then begin
              divs.Add(d);      
              if d * d <> n then 
                divs.Add(n div d);
              if divs.Count > divCount then break;
            end;
          if divs.Count = divCount then
          begin
            divs.Sort();
            Println(divs);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      
      import math # для квадратного корня sqrt
      divCount = 6  # нужное количество делителей
      for n in range(164700, 164752 + 1):
        divs = [] # чистим список делителей
        for d in range(1,round(math.sqrt(n))): # перебор делителей
          if n % d == 0:
            divs.append(d) # добавляем делитель в список
            if d != n//d:
              divs.append(n//d)
            if len(divs) > divCount: break
        if len(divs) == divCount:
          divs.sort()
          print(divs)
      С++:

      ✎ Решение: Генерация списка делителей.
      Общая идея:

    • Для каждого числа указанного диапазона генерируем список делителей.
    • Если длина списка равна четырем, выводим его.
    • PascalABC.net:

      Python:

      for n in range(164700, 164752+1):
          divs = [d for d in range(1, n+1) if n % d == 0] 
          if len(divs) == 6:
              print( *divs )
      С++:

    Ответ:

    1 2 4 41177 82354 164708
    1 3 9 18301 54903 164709
    1 2 4 41179 82358 164716
    1 2 4 41183 82366 164732
    

    25_9:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190201; 190230], числа, имеющие ровно 4 различных делителя.
    Выведите эти четыре делителя для каждого найденного числа в порядке убывания.

    ✍ Решение:

      ✎ Решение (неоптимизированный вариант, метод полного перебора):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      
      begin
        var divs := new integer[4];
        for var n := 190201 to 190230 do
        begin
          var i := 0; // для индекса массива
          for var d := 1 to n do
          begin
            if n mod d = 0 then 
            begin
              if i < 4 then
                divs[i] := d;
              inc(i);
            end;
            if i > 4 then 
              break; 
          end;
          if i = 4 then begin
            println(divs.Reverse())
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      for n in range(190201,190230+1):
            divs = [] # чистим список делителей
            for d in range(1,n+1): #
              if n % d == 0:
                divs = divs + [d] # добавляем делитель в список
                if len(divs) > 4: break
            if len(divs) == 4:
              divs.reverse()
              print(*divs)
      С++:

      ✎ Решение (оптимизированный вариант):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      
      begin
        var divCount := 4;
        for var n := 190201 to 190230 do
        begin
          var divs := new List<integer>; 
          for var d := 1 to round(sqrt(n)) do
            if n mod d = 0 then begin
              divs.Add(d);      
              if d * d <> n then 
                divs.Add(n div d);
              if divs.Count > divCount then break;
            end;
          if divs.Count = divCount then
          begin
            divs.Sort();
            divs.Reverse();
            Println(divs);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      
      import math # для квадратного корня sqrt
      divCount = 4  # нужное количество делителей
      for n in range(190201, 190230 + 1):
        divs = [] # чистим список делителей
        for d in range(1,round(math.sqrt(n))): # перебор делителей
          if n % d == 0:
            divs.append(d) # добавляем делитель в список
            if d != n//d:
              divs.append(n//d)
            if len(divs) > divCount: break
        if len(divs) == divCount:
          divs.sort()
          divs.reverse()
          print(divs)
      С++:

      ✎ Решение: Генерация списка делителей.
      Общая идея:

    • Для каждого числа указанного диапазона генерируем список делителей.
    • Если длина списка равна четырем, выводим его.
    • PascalABC.net:

      Python:

      for n in range(190201, 190230+1):
          divs = [d for d in range(1, n+1) if n % d == 0] 
          if len(divs) == 4:
              divs.reverse() # реверсируем (по убыванию)
              print( *divs )
      С++:

    Ответ:

    190201 17291 11 1
    190202 95101 2 1
    190214 95107 2 1
    190219 853 223 1
    190222 95111 2 1
    190223 17293 11 1
    190227 63409 3 1
    190229 14633 13 1
    

    Видеоразбор задания:

    📹 YouTube здесь
    📹 Видеорешение на RuTube здесь


    25_10:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190201; 190280], числа, имеющие ровно 4 различных ЧЁТНЫХ делителя.
    Выведите эти четыре делителя для каждого найденного числа в порядке убывания.

    ✍ Решение:

      ✎ Решение (неоптимизированный вариант, метод полного перебора):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      
      begin
        var divs := new integer[4];
        for var n := 190201 to 190280 do
        begin
          var i := 0; // для индекса массива
          for var d := 1 to n do
          begin
            if (n mod d = 0) and (d mod 2 = 0) then 
            begin
              if i < 4 then
                divs[i] := d;
              inc(i);
            end;
            if i > 4 then 
              break; 
          end;
          if i = 4 then begin
            println(divs.Reverse())
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      for n in range(190201,190280+1):
            divs = [] # чистим список делителей
            for d in range(1,n+1): #
              if n % d == 0 and d%2==0:
                divs = divs + [d] # добавляем делитель в список
                if len(divs) > 4: break
            if len(divs) == 4:
              divs.reverse()
              print(*divs)
      С++:

      ✎ Решение: Генерация списка делителей.

      Общая идея:

    • Для каждого числа указанного диапазона генерируем список делителей.
    • Если длина списка равна четырем, выводим его.
    • PascalABC.net:

      Python:

      for n in range(190201, 190280+1):
          divs = [d for d in range(1, n+1) if n % d == 0 and d % 2 == 0] 
          if len(divs) == 4:
              divs.reverse()
              print( *divs )
      С++:

    Ответ:

    190226 838 454 2
    190234 17294 22 2
    190238 2606 146 2
    190252 95126 4 2
    190258 758 502 2
    190274 27182 14 2
    190276 95138 4 2
    

    25_11:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [394441; 394505], числа, имеющие максимальное количество различных делителей. Если таких чисел несколько, то найдите минимальное из них.
    Выведите количество делителей найденного числа и два наибольших делителя в порядке убывания.

    ✍ Решение:

      ✎ Решение (неоптимизированный вариант, метод полного перебора):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      
      begin
        var max := 0;
        var divsMax := new List<integer>; 
        for var n := 394441 to 394505 do
        begin
          var divs := new List<integer>; 
          for var d := 1 to n do
            if n mod d = 0 then 
              divs.Add(d);      
          if divs.Count > max then 
          begin
            max := divs.Count;
            divsMax := divs;
          end;
        end;
        divsMax.Reverse();
        print(max, divsMax[0], divsMax[1])
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      
      maxim = 0  # нужное количество делителей
      divsMax = []
      for n in range(394441, 394505 + 1):
        divs = [] # чистим список делителей
        for d in range(1,n+1): # перебор делителей
          if n % d == 0:
            divs.append(d) # добавляем делитель в список
        if len(divs) > maxim: 
          maxim = len(divs)
          divsMax = divs
      divsMax.reverse()
      print(maxim,divsMax[0],divsMax[1])
      С++:

      ✎ Решение (Генерация списка делителей):

      PascalABC.net:

      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      maxim=0
      divsmax=[]
      for n in range(394441, 394505+1):
          divs = [d for d in range(1, n+1) if n % d == 0] 
          if len(divs) > maxim:
              maxim = len(divs)
              divsmax = divs # сохраняем делители для числа с макс кол-вом дел-ей
      divsmax.reverse()
      print(maxim, divsmax[0], divsmax[1])
      С++:

    Ответ: 48 394450 197225

    Видео

    Простые числа

    25_12:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [3532000; 3532160], простые числа.
    Выведите все найденные простые числа в порядке убывания, слева от каждого числа выведите его номер по порядку.

    ✍ Решение:

      ✎ Решение (неоптимизированный вариант, метод полного перебора):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      
      begin
        var count := 0;
        for var n := 3532160 downto 3532000 do // цикл с конца 
        begin
          var flag := true; 
          for var d := 2 to n - 1 do // перебор делителей, начиная с двух до n-1
          begin
            if n mod d = 0 then begin // есть делитель помимо единицы и самого n
              flag := false; // число не простое     
              break;
            end;
          end;
          if flag = true then // если число простое
          begin
            inc(count);
            Println(count, n);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      count = 0
      for n in range(3532160, 3532000-1, -1): # цикл с конца и с шагом (-1) 
        flag = True
        for d in range(2, n): # перебор делителей, начиная с двух
          if n % d == 0: # есть делитель помимо единицы и самого n
            flag = False # число не простое
            break
        if flag == True: # число простое
          count+=1
          print(count , n)
      С++:

      ✎ Решение (оптимизированный вариант):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      
      begin
        var count := 0;
        for var n := 3532160 downto 3532000 do // цикл с конца 
        begin
          var flag := true; 
          var d := 2;
          while d * d <= n - 1 do // перебор делителей, начиная с двух
          begin
            if n mod d = 0 then begin // есть делитель помимо единицы и самого n
              flag := false;  // число не простое    
              break;
            end;
            d := d + 1;
          end;
          if flag = true then // если число простое
          begin
            inc(count);
            Println(count, n);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      
      count = 0
      for n in range(3532160, 3532000-1, -1): # цикл с конца и с шагом (-1) 
            flag = True
            d = 2
            while d*d <= n-1: # перебор делителей, начиная с двух
                  if n % d == 0: # есть делитель помимо единицы и самого n
                        flag = False # число не простое
                        break
                  d+=1
            if flag == True: # число простое
                  count+=1
                  print(count , n)
      С++:

    Ответ:

    1  3532147
    2  3532121
    3  3532103
    4  3532091
    5  3532049
    6  3532033
    7  3532021
    8  3532019
    9  3532007
    

    Задания прошлых лет для тренировки (до 2021)

    Задачи с поэлементной обработкой массива

    25_1: ЕГЭ по информатике 2017 года (один из вариантов со слов выпускника):

    Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество элементов массива НЕ кратных 3.

    Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.

    1
    2
    3
    4
    5
    6
    7
    8
    
    const N = 20;
    var i,j,k:integer;
    a:array [1..N] of integer; 
    begin
    for i:=1 to N do 
      readln(a[i]);end.

    ✍ Решение:

    Рассмотрим заданный фрагмент решения:

    • в цикле со счетчиком i запрашиваются значения элементов массива, т.е. формируется массив;
    • из постановки задания видим, что необходимо найти количество чего-то, это значит, что нужно использовать переменную счетчик;
    • объявлены три целочисленных переменных: i, j, k; переменная i использована в первом цикле, значит для счетчика можно взять переменную k;
    • счетчик всегда нужно обнулять, поэтому следующим оператором будет:
    • определим, количество чего нам необходимо считать: количество элементов массива не кратных 3. Кратность можно определить через остаток от деления: если значение элемента массива при делении на 3 в остатке не возвращает 0, значит элемент не кратен трем;
    • остаток при делении в паскале — оператор mod. Поскольку необходимо просмотреть каждый элемент массива, то это нужно делать в цикле for;
    • переменная i уже использована в первом цикле for, значит, для очередного цикла возьмем неиспользованную переменную j:
    • for j:=1 to N do
        if a[j] mod 3 <> 0 then
    • если условие истинно (т.е. нашелся элемент массива, не кратный трем), то увеличиваем счетчик:
    • после цикла остается вывести значение счетчика, т.е. вывести количество элементов массива не кратных 3:

    Результат:

    k:=0;
    for j:=1 to N do
      if a[j] mod 3 <> 0 then
        inc(k);
    writeln(k);

    Смотрите видео с подробным объяснением и разбором данного 25 задания:

    📹 YouTube здесь
    📹 Видеорешение на RuTube здесь


    Задачи на обработку элементов массива с последующей заменой

    25_3: Решение 25 задания ЕГЭ по информатике Демоверсия 2018:

    Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10000 включительно. Опишите на одном из языков программирования алгоритм, который находит количество элементов массива, больших 100 и при этом кратных 5, а затем заменяет каждый такой элемент на число, равное найденному количеству. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести измененный массив, каждый элемент массива выводится с новой строчки.

    Например, для массива из шести элементов: 4 115 7 195 25 106
    программа должна вывести числа 4 2 7 2 25 106

    Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    const
    N = 30;
    var
    a: array [1..N] of longint;
    i, j, k: longint;
    begin
    	for i := 1 to N do
    		readln(a[i]);
    	...
    end.

    В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

    Похожие задания для тренировки

    ✍ Решение:

      Решение на языке Паскаль:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      k := 0;
      for i := 1 to N do
      	if (a[i] > 100) and (a[i] mod 5 = 0) then
      		k:=k+1;
      for i := 1 to N do begin
      	if (a[i] > 100) and (a[i] mod 5 = 0) then
      		a[i] := k;
      writeln(a[i])
      end

    25_6:

    Дан массив, содержащий неотрицательные целые числа. Необходимо вывести:

  • максимальный чётный элемент, если количество чётных элементов не меньше, чем нечётных;
  • максимальный нечётный элемент, если количество нечётных эле-ментов больше, чем чётных.
  • Например, для массива из шести элементов: 4 6 12 17 3 8
    ответом будет 12 — наибольшее чётное число, поскольку чётных чисел в этом массиве больше

    Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    Python:

    1
    2
    3
    4
    5
    6
    
    # допускается также использовать
    # целочисленные переменные j, k, m
    a = []
    n = 2000 // менять значение n нельзя
    for i in range(0, n):
      a.append(int(input()))

    ✍ Решение:

      Решение на языке Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      
      a = []
      n = 2000 // менять значение n нельзя
      for i in range(0, n):
          a.append(int(input()))
      j = 0 
      k = 0 
      m = 0 
      for i in range(0, n):
      	if a[i]%2 == 0:
      		j+=1
      	else:
      		k+=1
      if k>j:
      	j = 0
      	for i in range(0, n):
      		if a[i]>j and a[i] % 2 != 0:
      			j = a[i]
      	print(j)
      else:
      	for i in range(0, n):
      		if a[i]>m and a[i] % 2 == 0:
      			m = a[i]
      	print(m)

    Задачи на обработку пар элементов массива (два подряд идущих)

    25_4:

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

    Например, для массива из семи элементов: 13; 323; 12; 33; 117 — ответ: 4.

    Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    const
      N = 40;
    var
      a: array [1..N] of integer;
      i, j, k: integer;
    begin
      for i := 1 to N do 
        readln(a[i]);
      ...
    end.

    ✍ Решение:
     

      1
      2
      3
      4
      5
      
      k := 0;
      for i := 1 to N - 1 do
       if ((a[i] < 100) and (a[i] > 9)) or ((a[i + l] < 100) and (a[i + 1] > 9)) then 
            inc(k);
      writeln(k);

    25_5:

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

    Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    Python:

    1
    2
    3
    4
    5
    6
    7
    
    #  допускается также использовать
    #  две целочисленные переменные
    #  j и k
    a = []
    n = 20
    for i in range(0, n):
      a.append(int(input()))

    ✍ Решение:

      Проанализируем данный фрагмент кода на языке Python:

    • В первой строчке кода объявляется список а. Дальше, идет объявление переменной n = 20, она отвечает за размер массива.
    • При решении такого рода задач, необходимо помнить, что массив в Python — это список и это динамический тип данных. Кроме того, нумерация элементов массива начинается с 0.

    • Ниже мы видим инициализацию списка а. Мы должны дописать код дальнейшей программы, который последует после заполнения списка пользователем.
    • Итак, по условию мы должны находить пары элементов, сумма которых делится на 2, но не делится на 4, причем парами считаются соседние элементы, например: a[0] и a[1], a[1] и a[2].
    • Мы можем узнать, делится ли данный элемент на число, если остаток от деления на него равен 0, и не делится — в противном случае. Тогда сумма соседних элементов при делении на 2 должна давать остаток 0, а при делении на 4 наоборот — отличный от 0.
    • Введем цикл, который будет перебирать все элементы массива, считать сумму соседей и проверять истинность условия.
    • for i in range(0, n-1):
          j = a[i] + a[i+1]
          if j%2 == 0 and j%4 != 0:

      Так как мы рассматриваем элемент a[i + 1], значит, цикл должен работать до n — 1, чтобы не выйти за границы диапазона массива.

    • Когда мы определились с условием, за счетчик возьмем переменную k, которую допустимо брать исходя из комментариев к программе.
    • ...
       if j%2 == 0 and j%4 != 0:
              k+=1
    • Мы добавили допустимую переменную j, чтобы условный оператор выглядел компактнее.
    • Однако задача еще не решена. Во-первых, мы должны до цикла инициализировать счетчик k = 0. Так как иначе Python выдаст ошибку.
    • Дело в том, что мы пытаемся присвоить переменной k его же значение, но на 1 больше, но интерпретатор «не встречал» раньше переменной k, из-за чего возникает ошибка.

    • Кроме того, добавим вывод результата после цикла.
    • Таким образом, правильный вариант с учетом доработок:
    • a = []
      n = 20
      for i in range(0, n):
        a.append(int(input()))
      k = 0
      for i in range(0, n - 1):
          j = a[i] + a[i + 1]
          if j%2 == 0 and j%4 != 0:
              k += 1
      print(k)

    Задачи на обработку трёх подряд идущих элементов массива (тройки элементов массива)

    25_2:

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

    Например, для массива из семи элементов: 2; 2; 2; 4; 4; 4; 4 — ответ: 3.

    Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    const
      N=40;
    var
      a: array[1..N] of integer;
      i, j, k:integer;
    begin
      for i:=1 to N do
        readln(a[i]);
      ...
    end.

    ✍ Решение:

    • из постановки задания видим, что необходимо искать количество чего-то, это значит, что нужно использовать переменную счетчик; возьмем для нее объявленную переменную k;
    • счетчик всегда нужно сначала обнулять, поэтому следующим оператором будет:
    • определим, количество чего нам необходимо считать: количество троек элементов массива, состоящих из равных между собой чисел. Т.е. необходимо сравнивать между собой каждые три подряд идущих элемента массива, например так:
    • if (a[i]=a[i+1]) and (a[i]=a[i+2]) then
          inc(k);
    • inc(k) — оператор, увеличивающий счетчик k на единицу;
    • условие необходимо выполнять в цикле, так как нужно проверить все элементы массива; цикл со счетчиком необходимо организовать от 1 до N-2, в противном случае индексы элементов a[i+2] выйдут за границы диапазона массива (например, при i = 40, получим … a[40+2], а 42-го элемента массива не существует, поэтому цикл надо делать до i = 38, т.е. N-2).

    Результат:

    for i:=1 to N-2 do
        if (a[i]=a[i+1]) and (a[i]=a[i+2]) then
          inc(k);
    writeln(k);

    Более подробное объяснение предлагаем посмотреть на видео:

    📹 YouTube здесь
    📹 Видеорешение на RuTube здесь


    Задачи на поиск максимума, минимума элементов массива и другие

    Всем привет! Пришло время разбора 25 задания из ЕГЭ по информатике 2021.

    Это задание требует умение программировать на каком-нибудь языке программирования, который разрешён на ЕГЭ по информатике 2021.

    Приступим к практике решения примерных задач из ЕГЭ по информатике 2021.

    Задача (Демонстрационный вариант ЕГЭ по информатике 2021)

    Напишите программу, которая ищет среди целых чисел, принадлежащих
    числовому отрезку [174457; 174505], числа, имеющие ровно два различных
    натуральных делителя, не считая единицы и самого числа. Для каждого
    найденного числа запишите эти два делителя в таблицу на экране с новой
    строки в порядке возрастания произведения этих двух делителей. Делители
    в строке таблицы также должны следовать в порядке возрастания.

    Например, в диапазоне [5; 9] ровно два целых различных натуральных
    делителя имеют числа 6 и 8, поэтому для этого диапазона таблица на
    экране должна содержать следующие значения:

    Пример ответа ЕГЭ по информатике 2021 Демо Задание 25

    Решение:

    Напишем программу в Pascal ABC.

    var i, j, d1, d2, count: integer;
    begin
      
      for i:=174457 to 174505 do begin // Перебираем числа из диапазона.
      
          d1:=1;
          d2:=1;
          count:=0;
        
        for j:=2 to i div 2 do begin // Ищем делители для конкретного числа
        
            if count > 2 then break;
            
            if (i mod j = 0) then begin
              
              if d1 = 1 then d1:=j
              else d2:=j;
    
              count:=count+1;
            end;
            
        end;
            
            if count = 2 then begin
              Writeln(d1, ' ', d2, ' ', d1*d2); // Распечатываем нужные числа.
            end;
        
        end;  
      
    End.
    

    Здесь мы перебираем все числа из нашего диапазона с помощью цикла for.

    Для каждого числа устанавливаем первоначальные значения (переменные d1, d2, count). Переменная d1 — отвечает за первый делитель, переменная d2 — за второй, переменная count — за количество делителей.

    Вторым циклом for мы проверяем для конкретного числа из диапазона, какие у него делители.

    Достаточно проверить значения до «половины числа». Значения, которые больше «половины числа» не могут быть делителем числа (Кроме самого числа, но в условии написано, что само число не нужно засчитывать, как делитель).

    Если d1=1, значит, мы нашли первый делитель, иначе второй делитель.

    Если значение переменной count больше, чем 2, то можно выйти из цикла, и проверять следующее число из диапазона.

    Печатаем делители числа и их произведение, если значение переменной count равно 2.

    После запуска программы получаем ответ.

    Ответ:

    3 58153
    7 24923
    59 2957
    13 13421
    149 1171
    5 34897
    211 827
    2 87251

    Разберём ещё одну примерную задачу из ЕГЭ по информатике 2021.

    Задача (Цифры делителя)

    Напишите программу, которая ищет среди целых чисел, принадлежащих
    числовому отрезку [33167; 33203], числа, имеющие хотя бы один натуральный трёхзначный делитель, у которого первая цифра и последняя цифра равны. Для каждого найденного числа запишите сначала само число, а затем найденный делитель в таблицу на экране с новой строки. Если таких делителей несколько, запишите наибольший.

    Сами числа записать в порядке возрастания.

    Например, в диапазоне [1000; 1010] ровно два целых числа, удовлетворяющих условию задачи. Поэтому для этого диапазона таблица на экране должна содержать следующие значения:

    Решение:

    Напишем программу для решения данной задачки.

    var i, j : integer;
    begin
      
      for i:=33167 to 33203 do begin // Перебираем числа из диапазона.
      
        for j:=100 to 999 do begin // Ищем делители
    
            if (i mod j = 0) and ( j mod 10 = j div 100) then begin
              
              Writeln(i, ' ', j); // Распечатываем нужные числа.
    
            end;
            
        end;
        
      end;  
      
    end.
    

    Делители должны быть трёхзначные, поэтому перебираем числа от 100 до 999. Проверяем, является ли число делителем для конкретного числа i из диапазона [33167; 33203]. Конструкция (j mod 10 = j div 100) проверяет равны ли первая цифра и последняя у натурального трёхзначного числа.

    После запуска программы получаем ответ.

    Ответ:

    33170 535
    33174 171
    33176 232
    33178 626
    33180 474
    33182 353
    33184 272
    33189 111
    33197 373

    Продолжаем подготовку к 25 заданию из ЕГЭ по информатике 2021.

    Задача (Максимальное количество делителей)

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [32633; 32900], ровно два числа, имеющих максимальное количество натуральных делителей. Для каждого найденного числа запишите сначала само число, а затем количество делителей в таблицу на экране с новой строки.

    Сами числа запишите в порядке возрастания.

    Например, в диапазоне [1; 10] ровно два целых числа, удовлетворяющих условию задачи. Поэтому для этого диапазона таблица на экране должна содержать следующие значения:

    Решение:

    Программа для данной задачи будет следующая:

    var i, j, n1, n2, count_1, count_2, count : integer;
    begin
    
       count_1:=0;
       count_2:=0;
       
       n1 := 0;
       n2 := 0; 
      
      for i:=32633 to 32900 do begin // Перебираем числа из диапазона.
      
        count:=0;
      
        for j:=1 to i div 2 do begin // Ищем делители
            if (i mod j = 0) then count:=count+1;
        end;
        
          if count>count_1 then begin
            
            if count>count_2 then begin
              
              count_1:=count_2;
              n1:=n2;
              
              count_2:=count;
              n2:=i;
              
            end
            else begin
              count_1:=count;
              n1:=i;
            end;
              
          end;
          
      end;
      
      Writeln(n1,' ', count_1+1);
      Writeln(n2,' ', count_2+1);
        
    end.
    

    Раз нам нужно написать два числа, то заводим две переменные n1 и n2, а так же count_1 и count_2, где будут сохраняться количество делителей. В переменной count хранится количество делителей для каждого числа.

    Механизм поиска двух максимальных значений: Проверяем больше ли переменная count, чем count_1. Если да, то нужно проверить, а вдруг она больше и чем count_2. Если она больше, чем count_2, мы значение, которое было в count_2 перекладываем в переменную count_1, а «победившее» count_2 значение записываем в саму переменную count_2.

    Значения для переменных n1 и n2 в нашей задаче так же меняются, как и значения для переменных count_1 и count_2.

    В конце мы прибавляем к переменным count_1 и count_2 по единице. Это делается из-за того, что мы проверяем числа до половины на то, являются ли они делители или нет. Но нужно учесть, что сами числа являются так же делителями.

    Ответ:

    Задача (Закрепление материала)

    Напишите программу, которая ищет среди целых чисел, принадлежащих
    числовому отрезку [11166; 11241], числа, имеющие ровно три различных
    натуральных делителя, не считая единицы и самого числа, которые начинаются на цифру 1. Для каждого
    найденного числа запишите эти три делителя в таблицу на экране с новой
    строки в порядке возрастания произведения этих двух делителей. Делители
    в строке таблицы также должны следовать в порядке возрастания.

    Например, в диапазоне [1; 100] таких числа ровно два, 60 и 90, поэтому для этого диапазона таблица на
    экране должна содержать следующие значения:

    Решение:

    Задача похоже на демонстрационную версию ЕГЭ по информатике.

    var i, j, d1, d2, d3, count, c, x: integer;
    begin
      
      for i:=11166 to 11241 do begin // Перебираем числа из диапазона.
      
          d1:=1;
          d2:=1;
          d3:=1;
          count:=0;
        
        for j:=2 to i div 2 do begin // Ищем делители для конкретного числа
        
            if count > 3 then break;
            
            if (i mod j = 0) then begin
              
              x:=j;
    
              c:=1;
    
              while x>0 do begin // Узнаём длину числа
                c:=c*10;
                x:=x div 10;
              end;
    
               c:=c div 10;
              
              if j div c = 1 then begin
              
                if d1 = 1 then d1:=j
                else begin
                  if d2=1 then d2:=j
                  else d3:=j;
                end;
              
              count:=count+1;
              end;
              
            end;
            
        end;
            
            if count = 3 then begin
              Writeln(d1, ' ', d2, ' ', d3, ' ', d1*d2*d3); // Распечатываем нужные числа.
            end;
        
        end;  
      
    End.
    

    Механизм определения трёх делителей берём из первой задачки.

    Чтобы узнать первую цифру, например, числа 543, нужно применить операцию целочисленного деления 543 div 100 = 5. Поэтому формируем переменную с со значением 10^len и с помощью неё проверяем первую цифру.

    Ответ:

    15 135 1245
    13 123 1599
    17 153 1241
    10 1124 1405
    12 1401 1868
    122 184 1403

    Друзья, нкито не знает, есть ли аналоги замечательного сайта, как у Александра, только по подготовке к профильной математике, чтобы также четко и доступно(бесплатно)?

    Здесь ошибка
    Задача (Закрепление материала)

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [11166; 11241], числа, имеющие ровно три различных натуральных делителя, не считая единицы и самого числа …..

    Например, в диапазоне [1; 100] ровно два целых различных натуральных делителя имеют числа 6 и 8, поэтому для этого диапазона таблица на экране должна содержать следующие значения:
    Числа 60 и 90 правильно

    Супер сайт, большое спасибо за разбор.

    Ошибка в ответе к Задаче 2 (Цифры делителя). Пропущено число и делитель 33178 313. Всего 10 пар чисел и делителей получается.

    Извиняюсь, не дочитал задачу. Все верно в ответе, «Если таких делителей несколько, запишите наибольший.»


    Пройти тестирование по этим заданиям
    Вернуться к каталогу заданий

    Версия для печати и копирования в MS Word

    1

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [174457; 174505], числа, имеющие ровно два различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа запишите эти два делителя в два соседних столбца на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в строке также должны следовать в порядке возрастания.

    Например, в диапазоне [5; 9] ровно два различных натуральных делителя имеют числа 6 и 8, поэтому для этого диапазона вывод на экране должна содержать следующие значения:

    2 3

    2 4

    Источник: Демонстрационная версия ЕГЭ−2021 по информатике


    2

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [245 690; 245 756] простые числа. Выведите на экран все найденные простые числа в порядке возрастания, слева от каждого числа выведите его порядковый номер в последовательности. Каждая пара чисел должна быть выведена в отдельной строке.

    Например, в диапазоне [5; 9] ровно два различных натуральных простых числа  — это числа 5 и 7, поэтому для этого диапазона вывод на экране должна содержать следующие значения:

    1 5

    3 7

    Примечание. Простое число  — натуральное число, имеющее ровно два различных натуральных делителя  — единицу и самого себя.


    3

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [210 235; 210 300], числа, имеющие ровно четыре различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа запишите эти четыре делителя в четыре соседних столбца на экране с новой строки. Делители в строке должны следовать в порядке возрастания.

    Например, в диапазоне [10; 16] ровно четыре различных натуральных делителя имеет число 12, поэтому для этого диапазона вывод на экране должна содержать следующие значения:

    2 3 4 6

    Ответ:


    4

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [185 311; 185 330], числа, имеющие ровно четыре различных натуральных делителя. Для каждого найденного числа запишите эти четыре делителя в четыре соседних столбца на экране с новой строки. Делители в строке должны следовать в порядке возрастания.

    Например, в диапазоне [12; 14] ровно четыре различных натуральных делителя имеет число 14, поэтому для этого диапазона вывод на экране должна содержать следующие значения:

    1 2 7 14

    Ответ:


    5

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [312614; 312651], числа, имеющие ровно шесть различных натуральных делителей. Для каждого найденного числа запишите эти шесть делителей в шесть соседних столбцов на экране с новой строки. Делители в строке должны следовать в порядке возрастания.

    Например, в диапазоне [12; 15] ровно шесть различных натуральных делителей имеет число 12, поэтому для этого диапазона вывод на экране должна содержать следующие значения:

    1 2 3 4 6 12

    Ответ:

    Пройти тестирование по этим заданиям

    Теория

    1. Как решать задание ЕГЭ
    2. Полезные функции и модули для эффективного решения задачи № 25 ЕГЭ

    Задания

    1. Задание для повторения. Этапы решения задачи

    Сложность:
    лёгкое

    1

    2. Задание для повторения. Определение правильной записи на языке Python

    Сложность:
    лёгкое

    1

    3. Задание для повторения. Замена элементов массива на Python

    Сложность:
    сложное

    3

    4. Задание для повторения. Поиск максимального чётного элемента на Python

    Сложность:
    сложное

    3

    Экзаменационные задания (подписка)

    1. Как на ЕГЭ (1). Обработка целочисленной информации

    Сложность:
    сложное

    1

    2. Как на ЕГЭ (2). Обработка целочисленной информации

    Сложность:
    сложное

    1

    3. Как на ЕГЭ (3). Обработка целочисленной информации

    Сложность:
    сложное

    1

    4. Как на ЕГЭ (4). Обработка целочисленной информации

    Сложность:
    сложное

    1

    Тесты

    1. Тренировочная работа по теме Задание № 25. Обработка целочисленной информации

    Сложность: среднее

    2

    Материалы для учителей

    1. Методическое описание

    В задание №26

    Тема: Обработка массива целых чисел из файла. Сортировка.

    Проверяется yмение обрабатывать целочисленную информацию с использованием сортировки

    Примеры заданий:

    Задание 26 Простое задание (Решу ЕГЭ)

    Системный администратор раз в неделю создаёт архив пользовательских файлов. Однако объём диска, куда он помещает архив, может быть меньше, чем суммарный объём архивируемых файлов. Известно, какой объём занимает файл каждого пользователя.

    По заданной информации об объёме файлов пользователей и свободном объёме на архивном диске определите максимальное число пользователей, чьи файлы можно сохранить в архиве, а также максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей.

    Входные данные:

    В первой строке входного файла находятся два числа: S — размер свободного места на диске (натуральное число, не превышающее 10 000) и N — количество пользователей (натуральное число, не превышающее 1000). В следующих N строках находятся значения объёмов файлов каждого пользователя (все числа натуральные, не превышающие 100), каждое в отдельной строке.

    Запишите в ответе два числа: сначала наибольшее число пользователей, чьи файлы могут быть помещены в архив, затем максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей.

    Пример входного файла:

    100 4

    80

    30

    50

    40

    При таких исходных данных можно сохранить файлы максимум двух пользователей. Возможные объёмы этих двух файлов 30 и 40, 30 и 50 или 40 и 50. Наибольший объём файла из перечисленных пар — 50, поэтому ответ для приведённого примера:

    2 50

    Проще всего 26-е задание решать в Excel. Можно решить задание и
    с помощью программы, но это будет посложнее. На ЕГЭ решение через программы не рекомендуется.
    Здесь и далее во всех задачах этого класса предполагается, что не все файлы могут быть сохранены на диске, то есть хотя бы для одного файла места не хватит.

    Решаем с помощью Excel

    1. Сначала загружаем данные в электронную таблицу, отрываем файл, копируем (Ctrl+A) и вставляем в Excel (Ctrl+V), для удобства переносим первую строку, которая содержит не такие данные, как все остальные и сортируем по возрастанию столбец А
    2. Далее начинаем выделять ячейки первого столбца, отслеживая значение суммы в строке состояния, нужно выделить наибольшее количество данных, сумма которых не больше, чем 8200
    3. Получили:
      — Количество строк 568 (это первый ответ)
      — Сумма 8176
      — Последний наибольший файл 29
    4. Попробуем заменить наибольший файл ещё большим, так как наш архив (8200) это позволяет сделать:
      — убираем наш наибольший 29 из общей суммы 8176-29=8147
      — из исходного объема архива отнимаем полученное 8200-8147=53, получается что нам надо поискать файл такого или немного поменьше размера.
    5. Спускаемся по списку и находим, что нам подходит первый файл размером 50

    Мы нашли максимальное количество файлов 568 и максимальный файл 50

    Ответ: 56850

    Задание 26 демо (ФИПИ-2022)

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

    Входные данные:

    В первой строке входного файла 26 (3).txt находится число N – количество занятых
    мест (натуральное число, не превышающее 10 000). Каждая из следующих N строк
    содержит два натуральных числа, не превышающих 100 000: номер ряда и номер
    занятого места.

    Выходные данные:

    Два целых неотрицательных числа: Максимальный номер ряда, где нашлись обозначенные в задаче места и минимальный номер подходящего свободного места.

    Типовой пример организации входных данных:

    7
    40 3
    40 7
    60 33
    50 125
    50 129
    50 68
    50 72
    Для приведённого примера, при условии, что необходимо
    3 свободных места, ответом является пара чисел: 50; 69.

    Типовой пример имеет иллюстративный характер. Для
    выполнения задания используйте данные из прилагаемых
    файлов.

    Решаем с помощью Excel

    Задание 26 Товар/Скидки (Решу ЕГЭ)

    Как нас обманывают в магазинах 🙂

    Продавец предоставляет покупателю, делающему большую закупку, скидку по следующим правилам:

    • — на каждый второй товар стоимостью больше 50 рублей предоставляется скидка 25%;
    • — общая стоимость покупки со скидкой округляется вверх до целого числа рублей;
    • — порядок товаров в списке определяет продавец и делает это так, чтобы общая сумма скидки была наименьшей.

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

    Входные данные:

    Первая строка входного файла содержит число N — общее количество купленных товаров. Каждая из следующих N строк содержит одно целое число — стоимость товара в рублях.

    Выходные данные:

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

    Типовой пример организации входных данных:

    6

    125

    50

    490

    215

    144

    320

    В данном случае товар стоимостью 50 не участвует в определении скидки, остальные товары продавцу выгодно расположить в таком порядке цен: 490, 125, 215, 144, 320. Тогда скидка предоставляется на товары стоимостью 125 и 144. Стоимость этих двух товаров со скидкой составит 201,75 руб., после округления — 202 руб. Общая стоимость покупки составит:

    50 + 490 + 215 + 320 + 202 = 1277 руб.

    Самый дорогой товар, на который будет получена скидка, стоит 144 руб. В ответе нужно записать числа 1277 и 144.

    Решаем с помощью Excel

    1. Отрываем файл, копируем (Ctrl+A) и вставляем в Excel (Ctrl+V), убираем первое число(N — общее количество купленных товаров) и сортируем по возрастанию
    2. Копируем диапазон товаров меньше 50, на который скидка не действует, переносим в отдельный столбец (С)
    3. Копируем диапазон от 50 и более, переносим в отдельные столбцы (Е и G)
    4. Столбец Е сортируем по убыванию, это будет более дорогой ПЕРВЫЙ товар, столбец G оставляем по возрастанию, это будет ВТОРОЙ по списку товар, на который действует скидка 25%
    5. Выделив столбец Е, мы видим, что ли количество товаров 965, делим его пополам и находим середину, между двумя столбцами, нижнюю половину удаляем
      Мы нашли Самый дорогой товар, на который будет получена скидка, стоит 511 руб.
    6. В ячейку Н2 вставляем формулу для переоценки каждого второго товара, т.е. цену умножаем на 0,75 (скидка 25%)
    7. Суммируем наш товар:
      — сумма товара без скидки до 50 рублей 1042
      — сумма КАЖДОГО ПЕРВОГО 366132
      — сумму товара со скидкой округляем ВВЕРХ 102610
      Сумма всего товара 469784

    Ответ: 469784 511

    Задание 26 Груз(Решу ЕГЭ)

    Для перевозки партии грузов различной массы выделен грузовик, но его грузоподъёмность ограничена, поэтому перевезти сразу все грузы не удастся. Грузы массой от 200 до 210 кг грузят в первую очередь, гарантируется, что все такие грузы поместятся. На оставшееся после этого место стараются взять как можно больше грузов. Если это можно сделать несколькими способами, выбирают тот способ, при котором самый большой из выбранных грузов имеет наибольшую массу. Если и при этом условии возможно несколько вариантов, выбирается тот, при котором наибольшую массу имеет второй по величине груз, и т. д. Известны количество грузов, масса каждого из них и грузоподъёмность грузовика. Необходимо определить количество и общую массу грузов, которые будут вывезены при погрузке по вышеописанным правилам.

    Входные данные:

    Первая строка входного файла содержит два целых числа: N — общее количество грузов и M — грузоподъёмность грузовика в кг. Каждая из следующих N строк содержит одно целое число — массу груза в кг.

    Выходные данные:

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

    Решаем с помощью Excel

    1. Отрываем файл, копируем (Ctrl+A) и вставляем в Excel (Ctrl+V), перемещаем первую ячейку (N — общее количество грузов и M — грузоподъёмность грузовика в кг) и сортируем по возрастанию данные в столбце А
    2. выбираем диапазон от 200 до 210 кг, можно его скопировать и вставить в отдельный столбик. Подсчитаем сумму и количество груза.
    3. Находим массу груза без главного 10000-2669=7331. В столбце А выделяем диапазон, который на превышает полученное число, фиксируем количество (110) и массу последнего большого груза (123).
    4. Стараются взять как можно больше грузов, если это можно сделать несколькими способами, выбирают тот способ, при котором самый большой из выбранных грузов имеет наибольшую массу. Если и при этом условии возможно несколько вариантов, выбирается тот, при котором наибольшую массу имеет второй по величине груз, и т. д.
    5. Постараемся найти такой груз, что бы грузоподъемность была наибольшей и количество грузов не поменялось. Будем подбирать

    Ответ: 123 10000

    ЕГЭ информатика 26 задание разбор, теория, как решать.

    Обработка целочисленной информации с использованием сортировки, (В) — 2 балла

    Е26.17 В магазине для упаковки подарков есть N кубических коробок.

    В магазине для упаковки подарков есть N кубических коробок. Самой интересной считается упаковка подарка по принципу матрёшки – подарок упаковывается в одну из коробок, та в свою очередь в другую коробку и т.д. Одну коробку можно поместить в другую, если длина её стороны хотя бы на 3 единицы меньше длины стороны другой коробки. Определите наибольшее …

    Читать далее

    Е26.16 В лесополосе осуществляется посадка деревьев.

    В лесополосе осуществляется посадка деревьев. Причем саженцы высаживают рядами на одинаковом расстоянии. Через какое-то время осуществляется аэросъемка, в результате которой определяется, какие саженцы прижились. Необходимо определить ряд с максимальным номером, в котором есть подряд ровно 11 неприжившихся саженцев, при условии, что справа и слева от них саженц прижились. В ответе запишите сначала наибольший номер ряда, затем …

    Читать далее

    Е26.15 определить номер ряда с наибольшим количеством светлых точек в нечётных позициях

    При проведении эксперимента заряженные частицы попадают на чувствительный экран, представляющий из себя матрицу размером 10 000 на 10 000 точек. При попадании каждой частицы на экран в протоколе фиксируются координаты попадания: номер ряда (целое число от 1 до 10 000) и номер позиции в ряду (целое число от 1 до 10 000). Точка экрана, в …

    Читать далее

    Е26.14 сначала наибольшее число пользователей, чьи файлы могут быть помещены в архив

    Системный администратор раз в неделю создаёт архив пользовательских файлов. Однако объём диска, куда он помещает архив, может быть меньше, чем суммарный объём архивируемых файлов. Известно, какой объём занимает файл каждого пользователя. По заданной информации об объёме файлов пользователей и свободном объёме на архивном диске определите максимальное число пользователей, чьи файлы можно сохранить в архиве, а …

    Читать далее

    Е26.13 определить максимальную длину такой группы и номер ряда

    При проведении эксперимента заряженные частицы попадают на чувствительный экран, представляющий из себя матрицу размером 10 000 на 10 000 точек. При попадании каждой частицы на экран в протоколе фиксируются координаты попадания: номер ряда (целое число от 1 до 10 000) и номер позиции в ряду (целое число от 1 до 10 000). Точка экрана, в …

    Читать далее

    Е26.12 определите цену самого дорогого товара, не участвующего в распродаже

    В магазине электроники раз в месяц проводится распродажа. Из всех товаров выбирают К товаров с самой большой ценой и делают на них скидку в 20%, затем ещё М товаров с самой большой ценой и делают на них скидку 10%. По заданной информации о цене каждого из товаров и количестве товаров, на которые будет скидка, определите …

    Читать далее

    Е26.11 числа в паре имеют разную чётность, а их сумма тоже присутствует в файле

    В текстовом файле записан набор натуральных чисел, не превышающих 109. Гарантируется, что все числа различны. Необходимо определить, сколько в наборе таких пар чисел, что числа в паре имеют разную чётность, а их сумма тоже присутствует в файле, и чему равна наибольшая из сумм таких пар. Входные данные Первая строка входного файла содержит целое число N …

    Читать далее

    Е26.10 Причем файлы размером больше 400 МБ записывает на диск A

    Системный администратор раз в неделю создаёт архив пользовательских файлов. Причем файлы размером больше 400 МБ записывает на диск A, а меньшего размера на диск F. Известно, какой объём занимает файл каждого пользователя. Системный администратор старается сохранить как можно больше файлов. Необходимо найти, сколько файлов на каждом диске может сохранить системный администратор и максимальный размер сохраненного …

    Читать далее

    Е26.9 Спутник «М305» проводит измерения солнечной активности

    Спутник «М305» проводит измерения солнечной активности, результат каждого измерения представляет собой натуральное число. Перед обработкой серии измерений из неё исключают K наибольших и K наименьших значений (как недостоверные). По заданной информации о значении каждого из измерений, а также количестве исключаемых значений, определите наибольшее достоверное измерение, а также целую часть среднего значения всех достоверных измерений. Входные …

    Читать далее

    Е26.8 чему равно наибольшее из средних арифметических таких пар

    В текстовом файле записан набор натуральных чисел, не превышающих 109. Гарантируется, что все числа различны. Необходимо определить, сколько в наборе таких пар чётных чисел, что их среднее арифметическое тоже присутствует в файле, и чему равно наибольшее из средних арифметических таких пар. Входные данные Первая строка входного файла содержит целое число N – общее количество чисел …

    Читать далее

    По теме: методические разработки, презентации и конспекты

    Трудности, возникшие при подготовке к ГИА по информатике: разбор отдельных задач

    Государственная итоговая аттестация (ГИА) — это форма государственной оценки освоения выпускниками основных общеобразовательных учебных программ.Экзамен (ГИА) по информатике является по выбору и состо…

    Разработка урока по информатике по теме «Перевод целых чисел из одной системы счисления в другую», 10 класс

    цель урока: Создание условий для развития  у учащихся логического мышления и навыков вычислений на основе понимания принципа построения числа в позиционной системе счисления, умений переводить це…

    ИНФОРМАТИКА . Разбор заданий ОГЭ (Задания 7 и 11)

    Разбор заданий поинформатике (Задания 7 и 11)Это анимированный поэтапный разбор заданий,представленный различными спорсобами….

    Подготовка к ГИА (9 класс).Разбор задания №8. Запросы. Логические выражения. Примеры и решения заданий различной сложности

    Задание №8 было введено в КИМы  Государственной итоговой аттестации (9 класс. информатика) два года назад. При подготовке обучающихся к экзмену, выяснила, что задание на «запросы» вызыв…

    Решение задач №25 ЕГЭ информатика (Обработка целых чисел. Проверка делимости. Python)

    Разбирается решение задач №25 ЕГЭ информатика (Обработка целых чисел. Проверка делимости. Python). Задачи с сайта Полякова К.Ю….

    Методическая разработка по информатике «Разбор заданий первой части экзамена по информатике в рамках подготовки к ОГЭ»

    Представленный методический материал соответствует требованиям Федерального государственного образовательного стандарта основного общего образования. Данная разработка подготовлена с учётом содержания…

    Подготовка к ЕГЭ по информатике. Разбор задания 15. Основные понятия математической логики

    Данный учебный материал отображает важные моменты задания 15 Основы математической логики. Рассмотрены разные типы задач и подходы к их решению. Предложены разные способы решения с помощью языка Pytho…

    Понравилась статья? Поделить с друзьями:
  • Обработка бланков егэ сроки
  • Образ ивана сусанина в литературе сочинение
  • Обостренный банты начать досуг поняла егэ
  • Образ ивана грозного в песне про купца калашникова сочинение 7 класс
  • Обосрался на экзамене