Заметили ошибку ?
Выделите это место и нажмите Ctrl + Q

ЕГЭ по информатике 2021 - Задание 25 (Обработка целочисленной информации)



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


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


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



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

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


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


23
24

Пример ответа ЕГЭ по информатике 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.


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


Ответ:

358153
724923
592957
1313421
1491171
534897
211827
287251

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





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

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


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


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


1008252
1010505

Решение:

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


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) проверяет равны ли первая цифра и последняя у натурального трёхзначного числа.


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


Ответ:

33170535
33174171
33176232
33178626
33180474
33182353
33184272
33189111
33197373


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


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

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


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


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


64
84

Решение:

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


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 по единице. Это делается из-за того, что мы проверяем числа до половины на то, являются ли они делители или нет. Но нужно учесть, что сами числа являются так же делителями.


Ответ:

3264064
3276096


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

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


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


101215
101518

Решение:

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


var i, j, d1, d2, d3, count, len, 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
          
          len:=0;
          
          x:=j;
          
          while x>1 do begin // Узнаём длину числа
            len:=len+1;
            x:=x div 10;
          end;
          
          c:=1;
          
          while len>0 do begin // Получаем число 10^len
            c:=c*10;
            len:=len-1;
          end;
          
          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.

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


Узнаём количество разрядов делителя и записываем в переменную len (Записываем количество разрядов минус 1).


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


Ответ:

151351245
131231599
171531241
1011241405
1214011868
1221841403





12-01-2021 в 15:11:32







Похожая статья:

ЕГЭ по информатике - Задание 10 (Супер-разбор!)

Сегодня на повестке дня 10 задание из ЕГЭ по информатике...

Категория: ЕГЭ  Подкатегория: -
Дата: 15-01-2018 в 16:47:34 0



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота. Расположите картинки горизонтально:


Последние
видео:



ЕГЭ по информатике - Задание 24
ЕГЭ по информатике - Задание 23





Давайте
дружить!


Группа Вконтакте Code-Enjoy

Твиттер Александра Калужского

YouTube канал Code-Enjoy