Задание 17 ЕГЭ информатика по теме «Обработка целочисленной информации»

Дата изменения: 4 августа 2022
На уроке рассмотрен материал для подготовки к ЕГЭ по информатике, разбор 17 задания. Объясняется тема о программной обработке числовой информации.

ЕГЭ по информатике 17 задания объяснение

17-е задание: «Программная обработка целочисленной информации»
Уровень сложности — повышенный,
Требуется использование специализированного программного обеспечения — да,
Максимальный балл — 1,
Примерное время выполнения — 15 минут.
  
Проверяемые элементы содержания: Умение создавать собственные программы (20–40 строк) для обработки целочисленной информации

Выполнение 17 задания ЕГЭ

Плейлист видеоразборов задания на YouTube:

Задание демонстрационного варианта 2022 года ФИПИ


17_1: Демоверсия варианта ЕГЭ по информатике 2021, ФИПИ:

Рассматривается множество целых чисел, принадлежащих числовому отрезку [1016; 7937], которые делятся на 3 и не делятся на 7, 17, 19, 27. Найдите количество таких чисел и максимальное из них.
В ответе запишите два целых числа: сначала количество, затем максимальное число.

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

  
Типовые задания для тренировки

Ответ: 1568 | 7935
 
Видео  
✍ Решение:

    ✎ Решение с использованием программирования:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    var
      i, k, max: integer;
     
    begin
      k := 0;
      max := 0;
      for i := 1016 to 7937 do 
      begin
        if (i mod 3 = 0) and (i mod 7 > 0) and (i mod 17 > 0) and (i mod 19 > 0) and (i mod 27 > 0) then
        begin
          max:= i;
          inc(k);
        end;
      end;
      writeln(k, ' ', max)
    end.

    PascalABC.NET:

    1
    2
    3
    4
    
    begin
     var s := Range( 1017, 7937, 3).Where( i -> not i.DivsAny(7, 17, 19, 27) );
     print( s.Count, s.Max );            
    end.

    Python:

    1
    2
    3
    
    a = [n for n in range(1016,7937+1) 
         if (n%3==0 and n%7!=0 and n%17!=0 and n%19!=0 and n%27!=0)]
    print(len(a),max(a))
    Список a формируем, используя генератор списка: то есть в список попадут только не числа из диапазона [1016,7937], которые удовлетворяют всем перечисленным условиям: n%3==0 (число делится на 3), n%7!=0 (число не делится на 7) и т.п.

    C++:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    #include <iostream>
    int main()
    {
      int count = 0;
      int maxGood = 0;
      for(int n=1016; n<=7937; n++)
        if( (n % 3 == 0) and (n % 7 != 0) and 
            (n % 17 != 0) and (n % 19 != 0) and (n % 27 != 0) ) {
          maxGood = n;    
          count += 1;
          }  
      std::cout << count << " " << maxGood;
    }

    ✎ Решение с помощью Excel:

  • Первое значение диапазона введем в ячейку A1:
  • Используем прогрессию для заполнения всего диапазона числами. Для это выберите вкладку Главная и щелкните по кнопке Прогрессия:
  • Столбец B будем использовать для поиска чисел, которые делятся на 3. Для этого в ячейку B1 введите формулу с рисунка:
  • Двойным щелчком по маркеру заполнения скопируйте формулу на весь столбец:
  • Столбец С будем использовать для поиска чисел, которые НЕ делятся на 7. Для этого в ячейку С1 введите формулу с рисунка:
  • Заполните весь столбец двойным щелчком по маркеру заполнения.
  • Cтолбцы D, E, F таким же образом будем использовать для поиска чисел столбца А, которые не делятся на 17, 19 и 27
  • Для поиска всех истинных значений используем столбец G. В ячейку G1 введите функцию ЕСЛИ: если все значения ячеек в столбцах B-F в этой строке истинны, выводим число из А1, иначе – пустую строку:

  • Заполните весь столбце, используя маркер автозаполнения.

  • Ячейку H1 будем использовать для подсчета таких чисел, которые удовлетворяют всем условиям, т.е. для подсчета непустых ячеек столбца G:
  • Ячейку H2 будем использовать для подсчета такого наибольшего числа:

Видеоразбор 17 задания ЕГЭ:
📹 YouTube здесь

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


Работа с цифрами числа в n-й системе счисления

17_2:

Рассматривается множество целых чисел, принадлежащих числовому отрезку [3712; 8432], которые удовлетворяют следующим условиям:
− запись в двоичной и четверичной системах счисления заканчивается одинаковой цифрой;
− кратны 13, 14 или 15.

Найдите количество таких чисел и минимальное из них.

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

  
Типовые задания для тренировки

Ответ: 471   3720
✍ Решение:

✎ Решение с использованием программирования:

Паскаль:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
 var k, n, min:integer;
 
begin
  k:=0; min:=8433;
  for n:= 3712 to 8432 do
    if (n mod 2 = n mod 4) and ((n mod 13=0) or (n mod 14=0) or (n mod 15=0)) then
      begin
        if min>n then
        min:=n;
        k:=k+1;
      end;
      Writeln (k,' ',min);
End.

PascalABC.NET:

1
2
3
4
5
6
7
begin
 var s := Range( 3712, 8432)
   .Where(i -> ((i mod 13=0) or (i mod 14=0) or (i mod 15=0)) and (i mod 2 = i mod 4));
    // или: .Where( i -> (i.DivsAny(13,14,15)) and (i mod 2 = i mod 4));
 s.Count.Print;
 s.Min.Print;  
end.

Python:

1
2
L = [x for x in range(3712, 8432+1) if (x % 13 == 0 or x % 14 == 0 or x % 15 == 0) and ( x % 2 == x % 4)]
print(len(L),' ',L[0])
Формируем список (массив) L только из подходящих элементов, то есть удовлетворяющих всем, перечисленным в задании, условиям. Затем выводим длину списка (len(L)), т.е. найденное количество таких чисел, и нулевой элемент, он же минимальный, поскольку числа упорядочены по возрастанию (L[0])

C++:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
int main()
{
	int count = 0;
	int min = 8433;
	for (int n = 3712; n <= 8432; n++)
		if (((n % 2 == n % 4) && ((n % 13 == 0) || (n % 14 == 0) || (n % 15 == 0))) )
		{
			if (n < min) min = n;
			count += 1;
		}
	std::cout << count << " " << min;
}

✎ Решение с помощью Excel:

  • Первое значение диапазона введем в ячейку A1:
  • Используем прогрессию для заполнения всего диапазона числами. Для это выберите вкладку Главная и щелкните по кнопке Прогрессия:
  • Столбец B будем использовать для поиска чисел, которые кратны 13, 14 или 15. Для этого в ячейку B1 введите формулу с рисунка:
  • Двойным щелчком по маркеру заполнения скопируйте формулу на весь столбец:
  • Столбец С будем использовать для поиска чисел, запись которых в двоичной и четверичной системах счисления заканчивается одинаковой цифрой. Для этого в ячейку С1 введите формулу с рисунка:
  • Заполните весь столбец двойным щелчком по маркеру заполнения.
  • Для поиска всех истинных значений используем столбец D. В ячейку D1 введите функцию ЕСЛИ: если все значения ячеек в столбцах B, C в этой строке истинны, выводим число из А1, иначе – пустую строку:
  • Заполните весь столбце, используя маркер автозаполнения.
  • Ячейку E1 будем использовать для подсчета таких чисел, которые удовлетворяют всем условиям, т.е. для подсчета непустых ячеек столбца D:
  • Ячейку E2 будем использовать для подсчета такого наименьшего числа (или просмотрите столбец D визуально и найдите первое значение):

  • 17_3:

    Рассматривается множество целых чисел, принадлежащих числовому отрезку [1000; 9999], запись которых в пятеричной системе имеет не менее 6 цифр и заканчивается на 21 или 23.

    Найдите количество таких чисел и минимальное из них.

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

      

    Ответ: 550   3136
      
    ✍ Решение:

    ✎ Решение с использованием программирования:
    PascalABC.NET:

    1
    2
    3
    4
    5
    6
    
    ### uses school;
    var s := Range(1000, 9999)
       .Where(i -> (i.ToString.ToBase(5).Length=6) and (i div 5 mod 5 = 2)
           and((i mod 5 = 1) or (i mod 5 = 3)));
    s.Count.Print;
    s.Min.Print;

    Python:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    numb=''
    result=list()
    for i in range(1000, 9999+1):
        if ((i // 5) % 5 ==2) and (( i % 5 == 1) or ( i % 5 == 3)):
            while i>=5: #Цикл перевода числа из 10-й в 5-ю сс
                s=i%5
                numb=str(s)+numb
                i=i//5
                if i<5:
                    numb=str(i)+numb
            n=len(numb)
            if n>5:
                result.append(numb) # список из чисел в 5-й с.с
            numb=""
    kolvo=len(result)
    minNumb=int(min(result),5) # перевод в десятичную с.с и поиск min
    print(kolvo,minNumb)
    3 комментария

      Светлана

      В задании 17_2: 17 опечатка
      Программа с++ строка 9
      if (min == 8433) min = n;

      надо
      if (n<min) min = n;

      Володя

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

      function per(ch,osn:int64):int64;
      var i,r,r1:int64;s:array [1..100] of int64;
      begin
      r:=1;
      r1:=1;
      while (ch>0) do begin
      s[r]:=ch mod osn;
      ch:=ch div osn;
      r:=r+1;
      end;
      for i:=1 to r do begin
      ch:=ch+s[i]*r1;
      r1:=r1*10;
      end;
      per:=ch;
      end;
      var i,count,min:int64;
      begin
      count:=0;
      min:=10000;
      for i:=1000 to 9999 do begin
      if (per(i,5)>99999) and (per(i,5)i) then min:=i;
      end;
      end;
      writeln(count,’ ‘,min);
      end.

        Володя

        Сайт немного обрезал программу. Вот основное тело.

        begin
        count:=0;
        min:=10000;
        for i:=1000 to 9999 do begin
        if (per(i,5)>99999) and (per(i,5)i) then min:=i;
        end;
        end;
        writeln(count,’ ‘,min);
        end.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    *
    *

    Вставить формулу как
    Блок
    Строка
    Дополнительные настройки
    Цвет формулы
    Цвет текста
    #333333
    Используйте LaTeX для набора формулы
    Предпросмотр
    \({}\)
    Формула не набрана
    Вставить