Демоверсия егэ информатика 2021 решение

группа vk вконтакте

группа fb facebook

*** ПЛЕЙЛИСТ КАНАЛА ЮТЬЮБ ***
 
ЕГЭ по информатике -> демоверсия ЕГЭ 2021
 
Скачать pdf демоверсии варианта ->
  

1.
1 задание. Демо ЕГЭ 2021 информатика, ФИПИ:

На рисунке схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
демо 2021 информатика 1 задание
Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова протяжённость дороги из пункта Г в пункт Ж. В ответе запишите целое число – так, как оно указано в таблице.

Ответ: 9

Видео


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

Миша заполнял таблицу истинности функции

(x ∨ y) ∧ ¬(y ≡ z) ∧ ¬w
но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.

Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных w, x, y, z.

Перем.1 Перем.2 Перем.3 Перем.4 Функция
??? ??? ??? ??? F
1 1 1
0 1 0 1
1 1 0 1

В ответе запишите буквы в том порядке, в котором идут соответствующие им столбцы.

Ответ: zyxw
  
Видео


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

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

Ответ: 64
 


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

Для кодирования некоторой последовательности, состоящей из букв Л, М, Н, П, Р, решили использовать неравномерный двоичный код, удовлетворяющий условию, что никакое кодовое слово не является началом другого кодового слова. Это условие обеспечивает возможность однозначной расшифровки закодированных сообщений. Для букв Л, М, Н использовали соответственно кодовые слова 00, 01, 11. Для двух оставшихся букв – П и Р – кодовые слова неизвестны.
Укажите кратчайшее возможное кодовое слово для буквы П, при котором код будет удовлетворять указанному условию. Если таких кодов несколько, укажите код с наименьшим числовым значением.

Ответ: 100
  
Видео


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

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему правилу:
  а) складываются все цифры двоичной записи числа N, и остаток от деления суммы на 2 дописывается в конец числа (справа).

Например, запись 11100 преобразуется в запись 111001;

 б) над этой записью производятся те же действия – справа дописывается остаток от деления суммы её цифр на 2.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Укажите такое наименьшее число N, для которого результат работы данного алгоритма больше числа 77. В ответе это число запишите в десятичной системе счисления.

Ответ: 19
  
Разбор подобного задания смотрите на видео:
Видео
✍ Решение:

  • Заметим, что после второго пункта условия задачи получаются только четные числа (т.к. если число в двоичной системе заканчивается на 0, то оно четное). Таким образом, нас будут интересовать только четные числа.
  • Наименьшим возможным числом, превышающим 77, является число 78. С ним и будем работать.
  • Переведем 78 в двоичную систему счисления. Используя компьютер это можно сделать с помощью программистского режима калькулятора. Либо в консоли интерпретатора Python набрать bin(78). Получим:
  • 1001110
  • В данном числе выделенная часть — это N. Значит, необходимое нам двоичное число — это 10011. После первого пункта задачи к данному числу должна была добавиться справа единица, так и есть: 100111. А затем добавляется 0: 1001110. Соответственно, оно подходит.
  • Переведем его обратно в десятичную систему, используя калькулятор либо консоль пайтон:
  • int('10011',2)
  • Получим 19.

Ответ: 19


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

Определите, при каком наименьшем введённом значении переменной s программа выведет число 64. Для Вашего удобства программа представлена на четырёх языках программирования.

Паскаль:

1
2
3
4
5
6
7
8
9
10
11
12
13
var
  s, n: integer;
 
begin
  readln(s);
  n := 1;
  while s < 51 do
  begin
    s := s + 5; 
    n := n * 2 
  end;
  writeln(n) 
end.
Алгоритмический язык:

алг
нач
 цел n, s
 ввод s
 n := 1
 нц пока s < 51
  s := s + 5
  n := n * 2
кц
вывод n
кон
Python:

s = int(input())
n = 1
while s < 51:
   s = s + 5
   n = n * 2
print(n)
С++:

#include <iostream>
using namespace std;
int main()
{ int s, n;
 cin >> s;
 n = 1 ;
 while (s < 51) { s = s + 5; n = n * 2; }
 cout << n << endl;
 return 0;
}

Ответ: 21
  
Видео 

✍ Решение:

    ✎ Способ 1 (программный):
    Pascalabc.net:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    begin
      var s1 := 1;
      while true do // внешний цикл, бесконечный
      begin
        var s := s1;
        // --- код из условия задания --- //
        var n := 1;
        while s < 51 do
        begin
          s := s + 5; 
          n := n * 2
        end;
        if n = 64 then // если найдено, то выводим соответствующее s
        begin
          print(s1); 
          break;  // выход из бесконечного цикла 
        end;
        s1 := s1 + 1; // 
      end;
    end.

    Пояснение:

  • Поскольку в цикле s увеличивается, а по условию задания следует найти наименьшее значение s, то можно начать с s=1, постоянно увеличивая значение s на единицу во внешнем цикле.
  • Важно для внешнего цикла использовать другую переменную, т.к. во внутреннем цикле переменная s меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значение s, увеличив его всего на 1. Используем переменную S1 для этих целей.
  • Бейсик:

     
    Python:

    s1 = 1
    while True:  # внешний цикл, бесконечный
        s = s1
        # --- код из условия задания --- 
        n = 1
        while s < 51:
            s = s + 5
            n = n * 2
        # --- конец кода из условия задания --- 
        if n == 64:
            print(s1)
            break
        s1 += 1
    С++:

     

Ответ: 21


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

Для хранения произвольного растрового изображения размером 128×320 пикселей отведено 20 Кбайт памяти без учёта размера заголовка файла. Для кодирования цвета каждого пикселя используется одинаковое количество бит, коды пикселей записываются в файл один за другим без промежутков.
Какое максимальное количество цветов можно использовать в изображении?

Ответ: 16
  
Разбор подобного задания смотрите на видео:
🎦 Видео 


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

Игорь составляет таблицу кодовых слов для передачи сообщений, каждому сообщению соответствует своё кодовое слово. В качестве кодовых слов Игорь использует трёхбуквенные слова, в которых могут быть только буквы Ш, К, О, Л, А, причём буква К появляется ровно 1 раз. Каждая из других допустимых букв может встречаться в кодовом слове любое количество раз или не встречаться совсем. Сколько различных кодовых слов может использовать Игорь?

Ответ: 48
  ✍ Решение:

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

    PascalABC.net:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    begin
    var n:=0;
    var str:='школа';
    for var s1:=1 to length(str) do
      for var s2:=1 to length(str) do
        for var s3:=1 to length(str) do
          begin
            if (str[s1]+str[s2]+str[s3]).Count(x->x='к')=1 then
              n+=1;
          end;
    print(n)
    end.
    Python:

    1
    2
    3
    4
    5
    6
    7
    8
    
    n = 0
    str = 'школа'
    for s1 in str:
      for s2 in str:
        for s3 in str:
            if (s1 + s2 + s3).count('к')==1:
              n += 1
    print(n)
    С++:

    1
    
     

Разбор подобного задания смотрите на видео:
🎦 Видео 


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

Задание выполняется с использованием прилагаемых файлов

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

Ответ: 14
  
🎦 Видео 


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

Задание выполняется с использованием прилагаемых файлов

  
С помощью текстового редактора определите, сколько раз, не считая сносок, встречается слово «долг» или «Долг» в тексте романа в стихах А.С. Пушкина «Евгений Онегин». Другие формы слова «долг», такие как «долги», «долгами» и т.д., учитывать не следует. В ответе укажите только число.

Ответ: 1
  
🎦 Видео 


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

При регистрации в компьютерной системе каждому объекту сопоставляется идентификатор, состоящий из 15 символов и содержащий только символы из 8-символьного набора: А, В, C, D, Е, F, G, H. В базе данных для хранения сведений о каждом объекте отведено одинаковое и минимально возможное целое число байт. При этом используют посимвольное кодирование идентификаторов, все символы кодируют одинаковым и минимально возможным количеством бит. Кроме собственно идентификатора, для каждого объекта в системе хранятся дополнительные сведения, для чего отведено 24 байта на один объект.
Определите объём памяти (в байтах), необходимый для хранения сведений о 20 объектах. В ответе запишите только целое число – количество байт.

Ответ: 600
 
Разбор подобного задания смотрите в видео:
🎦 Видео  


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

Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150.Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

Б) нашлось (v).

Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.


Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 70 идущих подряд цифр 8? В ответе запишите полученную строку.

НАЧАЛО
ПОКА нашлось (2222) ИЛИ нашлось (8888)
  ЕСЛИ нашлось (2222)
    ТО заменить (2222, 88)
    ИНАЧЕ заменить (8888, 22)
  КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

Ответ: 22
  
✍ Решение:

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    begin
       var s := '8'*70;
       var p2 := Pos('2222',s);
       var p8 := Pos('8888',s);
       while (p2 > 0) or (p8 > 0) do begin
         if p2 > 0 then begin
           Delete( s, p2, 4 );
           Insert( '88', s, p2 );
         end
         else begin
           Delete( s, p8, 4 );
           Insert( '22', s, p8 );
         end;
         p2 := Pos('2222',s);
         p8 := Pos('8888',s);
       end; 
       write(s);
    end.

    Вариант 2:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    begin
      var s: string := '8' * 70;
      while (s.contains('2222')) or (s.contains('8888')) do
      begin
        if (s.contains('2222')) then
          s := s.replace('2222', '88')
        else
          s := s.replace('8888', '22');
      end;
      writeln(s);
    end.

    Питон:

    1
    2
    3
    4
    5
    6
    7
    
    s = 70 * '8'
    while "2222" in s or "8888" in s:
      if "2222" in s:
        s = s.replace( "2222", "88", 1 )
      else:
        s = s.replace( "8888", "22", 1 )
    print(s)

Разбор подобного задания смотрите в видео:
🎦 Видео  


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

На рисунке представлена схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К, Л, М. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой.
Сколько существует различных путей из города А в город М, проходящих через город В?
13 задание демо 2021

Ответ: 24
 
Разбор подобного задания смотрите в видео:
🎦 Видео


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

Значение арифметического выражения: 497 + 721 – 7 – записали в системе счисления с основанием 7. Сколько цифр 6 содержится в этой записи?

Ответ: 13
 ✍ Решение:

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

PascalABC.NET:

begin
  var k := 0;
  var x: Biginteger;
  x := Biginteger.Pow(49, 7) + Biginteger.Pow(7, 21) - 7;
  // в получившемся числе рассматриваем каждую цифру в 7-й системе сч.
  while x > 0 do
  begin
    if x mod 7 = 6 then k += 1; // если цифра = 6, то считаем ее
    x := x div 7; // убираем разряд числа в 7-й системе сч.
  end;
  println(k);
end.
Python:

x = 49**7 + 7**21 - 7
k = 0
# в получившемся числе рассматриваем каждую цифру в 7-й системе сч.
while x: 
    if x % 7 == 6: # если цифра = 6, то считаем ее
        k += 1
    x //= 7 # убираем разряд числа в 7-й системе сч.
print( k )
С++:

 

Ответ: 13

Разбор подобного задания смотрите в видео:
🎦 Видео


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

Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m».
Для какого наибольшего натурального числа А формула

¬ДЕЛ(x, А) → (ДЕЛ(x, 6) → ¬ДЕЛ(x, 9))

тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х)?

Ответ: 18
 ✍ Решение:

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

1
 

Питон:

1
2
3
4
5
6
for A in range(1,1000):
  OK = 1
  for x in range(1,1000):
    OK *= (x % A != 0) <= ((x % 6 == 0) <= (x % 9 != 0))
  if OK:
    print( A )

C++:

1
 

✎ Решение теоретическое:

  • Введем обозначения и перепишем исходную формулу:
  • ¬А → (6 → ¬9) = 1
  • Избавимся от импликации:
  • А¬6 ∨ ¬9 = 1
  • Будем отрицать известную часть:
  • ¬(¬6 ∨ ¬9) = 1
  • Получаем:
  • 6 ∧ 9 = 1
  • Таким образом, необходимо найти наибольшее А, на которое делятся все натуральные х, такое что эти х делятся и на 6 и на 9 одновременно:
  • x/A : x/6 AND x/9 
  • Переберем х, которые одновременно делятся и на 6 и на 9:
  • х = 18, 36, 54, 72 ...
  • Переберем А, начиная с наименьшего, до такого наибольшего А, которое будет делителем всех найденных х:
  • А = 1, 2, 3, 4, 5, ... 18
    При попытке взять большее А, x равный 18 не будет делиться на такое А.

Ответ: 18


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

Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:

F(n) = 1 при n = 1;
F(n) = n + F(n − 1), если n – чётно,
F(n) = 2 × F(n − 2), если n > 1 и при этом n – нечётно

Чему равно значение функции F(26)?

Ответ: 4122
  
🎦 Видео  
 ✍ Решение:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
function F(n: integer): integer;
begin
  if n <= 1 then
    F := 1;
  if n mod 2 = 0 then
    F := n + F(n - 1);
  if (n > 1) and (n mod 2 <> 0) then
    F := 2 * F(n - 2)
end;
 
begin
  print(F(26))
end.

Питон:

1
2
3
4
5
6
7
8
def F( n ):
   if n <= 1: 
      return 1
   if (n % 2 == 0):
      return n + F(n-1)
   if (n>1 and n % 2 != 0):
      return 2 * F(n-2)
print (F(26))

C++:

1
 

Ответ: 4122


17.
17 задание. Демоверсия варианта ЕГЭ по информатике 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.

    Питон:

    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 будем использовать для подсчета такого наибольшего числа:

🎦 Видео


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

Задание выполняется с использованием прилагаемых файлов

  
Квадрат разлинован на N×N клеток (1 < N < 17). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз – в соседнюю нижнюю. При попытке выхода за границу квадрата Робот разрушается. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клетке маршрута Робота.
Определите максимальную и минимальную денежную сумму, которую может собрать Робот, пройдя из левой верхней клетки в правую нижнюю.
В ответе укажите два числа – сначала максимальную сумму, затем минимальную.

Исходные данные представляют собой электронную таблицу размером N×N, каждая ячейка которой соответствует клетке квадрата.

Пример входных данных:

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

Ответ: 1204 | 502

Видео

Решение подобного задания


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

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза.

Например, пусть в одной куче 10 камней, а в другой 5 камней; такую позицию в игре будем обозначать (10, 5). Тогда за один ход можно получить любую из четырёх позиций: (11, 5), (20, 5), (10, 6), (10, 10).

Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 77. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах будет 77 или больше камней.
В начальный момент в первой куче было семь камней, во второй куче – S камней; 1 ≤ S ≤ 69.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока – значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по этой стратегии игрока, не являющиеся для него безусловно выигрышными, т.е. не являющиеся выигрышными независимо от игры противника.

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.

Ответ: 18

✍ Решение 1:

  • Нарисуем таблицу, в первом столбце которой будем откладывать количество камней в первой куче, а в первой строке - количество камней во второй куче. Получим матрицу. Поскольку в первой куче количество начинается с 7, то это и будет первым значением в таблице. Во второй куче начнем с наибольшего возможного числа - 69:
  • Далее будем рассуждать так: Петя может выиграть первым ходом, выполнив команду *2 (увеличить количество камней в куче в два раза), если вместо S (кол-во камней во второй куче), мы будем изменять значение, начиная от 35, до последнего возможного по условию значения 69:
  • 7 + 35*2 = 77 (>=77)
  • Соответственно, все значения большие 34 дадут в результате сумму, большую 76. Укажем это в таблице. + означает выигрышную позицию с первого хода.
  • По заданию необходимо, чтобы Петя проиграл. То есть необходимо подобрать S, из которого можно попасть в диапазон выигрышных позиций для соперника:
  • 17 * 2 = 34 (мало, необходимо 35 и более) 
    18 * 2 = 36 подходит!

Ответ: 18
✍ Решение 2 (Excel):

  • В столбце А отложим значения - количество камней в первой куче. Начнем с ячейки А2, в которую внесем начальное количество камней, т.е. 7. Автозаполнением продлим значения вниз до 25 примерно:
  • В строке 1 таблицы (начиная с ячейки B1) отложим значения для второй кучи. Поскольку в задании говорится, что 0<=S<=69, то последним значением пусть будет 40. В дальнейшем часть таблицы можно будет удалить:

  • Из двух команд, которые могут выполнять игроки, выберем наиболее сильную, т.е. благодаря которой можно быстрее достичь выигрышного диапазона и попасть в значения S>=77. Это команда удваивания количества камней, т.е. *2.
  • Для каждой из ячеек полученной таблицы рассчитаем значение, полученное в результате удвоения той кучи камней, в которой большее количество камней (так как это даст бОльший результат). Например, для ячейки С5, в которой игрок имеет в первой куче 10 камней, а во второй куче 2 камня, мы бы выполнили действие 10*2+2. Т.е. удвоили бы первую кучу, т.к. в ней больше камней.
  • Чтобы автоматизировать процесс необходимо использовать формулу, в которой найдем максимальное значение из двух вариантов: Максимальное из(1куча*2 + 2куча, 1куча + 2*2куча). Выразив это в формуле Excel, получим результат, который внесем в ячейку B2:
  • =МАКС($A2+2*B$1;2*$A2+B$1)
    
  • Здесь знак $ будем использовать для фиксации столбца А и строки 1 при копировании формулы.
  • задание 19 ЕГЭ информатика

  • Скопируем формулу на всю таблицу.
  • Выделим всю таблицу и используем Условное форматирование для выделения тех значений, которые попадают в выигрыш (>76):
  • Выделенные значения - это значения, которые можно получить в сумме двух куч, выполнив ход из данной ячейки. И по сути, это и есть выигрышные позиции с 1 хода.
  • Далее следуем логике рассуждения из предыдущего способа решения.

Ответ: 18

Решение задания смотрите на видео (2 способ, Excel):
Видео
Решение задания смотрите на видео (1 способ):
Видео
Решение подобного задания смотрите на видео:  
🎦 Видео


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

Для игры, описанной в предыдущем задании, найдите два таких значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

  • Петя не может выиграть за один ход;
  • Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
  • Найденные значения запишите в ответе в порядке возрастания.

    Ответ: 31 | 34
    ✍ Решение 1:

    • Проанализируем таблицу, увеличивая количество камней в первой куче и выполняя поиск выигрышных позиций с одного хода. Знаком +2 будет отмечать выигрышные позиции со второго хода, т.е. из которых можно перевести соперника в проигрышную позицию со знаком -:
    • Последующая логика рассуждений: Петя может выиграть свои вторым ходом, если он не может выиграть первым ходом, и одновременно получив позицию, выигрышную со второго хода:
    • (7,34) -> (8,34)
      (7,31) -> (14,31)

    Ответ: 31 34

    ✎ Решение 2 (Excel)

    • Продолжаем работать с той же таблицей, что и в задании 19. Выделим все проигрышные позиции (из которых можно походить только в выигрышные позиции для соперника, т.е. в выделенные ячейки):
  • Петя может выиграть свои вторым ходом, если он не может выиграть первым ходом, но может выполнить ход в позицию, проигрышную для соперника (в ячейку, выделенную красным). Такие позиции назовем выигрышные позиции со второго хода:
  • Этим ячейкам соответствует S=31 и S=34.
  • Ответ: 31 34

    Решение задания смотрите на видео (1 способ):
    🎦 Видео


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

    Для игры, описанной в задании 19, найдите минимальное значение S, при котором одновременно выполняются два условия:

  • у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
  • у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
  • ✍ Решение:

    • Необходимо найти для Пети проигрышные позиции со второго хода. Это должна быть первая строка, т.к. это первый ход Пети. Первое подходящее значение - 33, из него Петя может либо сразу походить в выигрышную позицию с первого хода (7, 66), либо в выигрышную позицию со второго хода: (7,34) и (8,33).
    • Но есть значение меньше 33, это значение 30:
    • Ваня выиграет с первого хода, если: Петя (7,60) 
      Ваня выиграет с последующих ходов, если: Петя (7,31), (8,30), (14,30) 
      

    Ответ: 30

    Решение задания смотрите на видео:
    🎦 Видео


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

    Ниже на четырёх языках программирования записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M. Укажите наибольшее число x, при вводе которого алгоритм печатает сначала 4, а потом 5.

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    var
      x, L, M, Q: integer;
    begin
      readln(x);
      Q := 9;
      L := 0;
      while x >= Q do
      begin
        L := L + 1;
        x := x - Q;
      end;
      M := x;
      if M < L then
      begin
        M := L;
        L := x;
      end;
      writeln(L);
      writeln(M);
    end.
    Алгоритмический язык:

    алг
    нач
      цел x, L, M, Q
      ввод x
       Q := 9
       L := 0
       нц пока x >= Q
         L := L + 1
         x := x - Q
       кц
       M := x
       если M < L
         то
            M := L
            L := x
       все
       вывод L, нс, M
    кон
    
    Python:

    x = int(input())
    Q = 9
    L = 0
    while x >= Q:
       L = L + 1
       x = x - Q
    M = x
    if M < L:
       M = L
       L = x
    print(L)
    print(M)
    С++:

    #include <iostream>
    using namespace std;
    int main()
    {
     int x, L, M, Q;
     cin >> x;
     Q = 9;
     L = 0;
     while (x >= Q){
       L = L + 1;
       x = x - Q;
     }
     M = x;
     if (M < L){
       M = L;
       L = x;
     }
     cout <<L <<endl <<M <<endl;
     return 0;
    }

    Ответ: 49
      


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

    Исполнитель преобразует число на экране.
    У исполнителя есть две команды, которым присвоены номера:
    1. Прибавить 1
    2. Умножить на 2
    Первая команда увеличивает число на экране на 1, вторая умножает его на 2.
    Программа для исполнителя – это последовательность команд.

    Сколько существует программ, для которых при исходном числе 1 результатом является число 20, и при этом траектория вычислений содержит число 10?
    Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.

    Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 16, 17.

    Ответ: 28
      


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

    Задание выполняется с использованием прилагаемых файлов

     
    Текстовый файл состоит не более чем из 106 символов X, Y и Z.
    Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.
    Для выполнения этого задания следует написать программу.

    Ответ: 35

    🎦 Видео

    ✍ Решение:

      Паскаль:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      
      var
        f: text;
        i, k, max: integer;
        s: string;
       
      begin
        assign(f, 'D:\24.txt');
        reset(f);
        readln(f, s);
        max := 1;
        k := 1; // кол-во подряд идущих
        for i := 2 to length(s) do
        begin
          if s[i] <> s[i - 1] then
          begin
            inc(k);
            if k > max then max := k;
          end
          else k := 1;
        end;
        write(max)
      end.

      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      f=open('D:/24.txt')
      s=f.readline()
      m=1
      k=1
      for i in range(1,len(s)):
          if s[i]!=s[i-1]:
              k+=1
              m=max(k,m)
          else:
              k=1
      print(m)

      


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

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

      

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

    2 | 3
    2 | 4
    

      
    Ответ:

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

    Разбор подобного задания смотрите на видео:
    🎦 Видео
    ✍ Решение:

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

      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[2];
        var divCount := 2;
        for var n := 174457 to 174505 do
        begin
          var i := 0; // для индекса массива
          for var d := 2 to n-1 do
          begin
            if n mod d = 0 then 
            begin
              if i < divCount then // чтобы индекс не выходил за границы массива
                divs[i] := d; 
              inc(i);
            end;
            if i > divCount then 
              break; 
          end;
          if i = divCount then
            println(divs)
        end;
      end.
      Python:

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

      1
      
       

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

    • Поскольку требуется искать числа, у которых есть всего два делителя, то следует помнить, что:
    • если число имеет ровно два делителя, отличных от единицы и самого числа, то произведение этих делителей и есть само число
    • Будем использовать оптимизированный вариант программы, подходящий для "медленных" компьютеров. Для этого перебор делителей для числа n будем выполнять от 2 до √n, округлив его до ближайшего целого числа (не включая точный квадратный корень, если он существует):
    • вместо диапазона делителей [2; число]
      использовать диапазон [2; округл(√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
      
      begin
        var divCount := 2;
        for var n := 174457 to 174505 do
        begin
          var divs := new List<integer>; 
          for var d := 2 to round(sqrt(n)) do
            if n mod d = 0 then begin
              divs.Add(d);      
              if d <> n div d then 
                divs.Add(n div d);
              if divs.Count > divCount then break;
            end;
          if divs.Count = divCount then
            Println(divs[0], divs[1]);
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      
      from math import sqrt
       
      for n in range(174457, 174505+1):
        divs = []
        q = int(sqrt(n))
        for d in range(2,q+1): # перебор делителей
          if n % d == 0:
            if d == n//d: # если точный квадратный корень
              divs = divs + [d]
            else:  
              divs = divs + [d, n//d]
            if len(divs) > 2: break # если превысили кол-во делителей - прерываем цикл
        if len(divs) == 2:
          print(divs) # вывод делителей
      С++:

      1
      
       

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

    • Для каждого числа указанного диапазона генерируем список делителей.
    • Если длина списка равна двум, выводим его.
    • 1
      2
      3
      4
      
      for n in range(174457, 174505+1):
        divs = [d for d in range(2, n) if n % d == 0] # range(2, n), т.к. два делителя, не считая 1 и самого числа
        if len(divs) == 2:
          print( *divs )

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

    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[2];
      var divCount := 2;
      for var n := 174457 to 174505 do
      begin
        var i := 0; // для индекса массива
        for var d := 2 to n div 2 do
        begin
          if n mod d = 0 then 
          begin
            if i < divCount then // чтобы индекс не выходил за границы массива
              divs[i] := d; 
            inc(i);
          end;
          if i > divCount then 
            break; 
        end;
        if i = divCount then
          println(divs)
      end;
    end.
    Python:

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

    1
    
     

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

    Задание выполняется с использованием прилагаемых файлов

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

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

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

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

    100 4
    80
    30
    50
    40
    

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

    2 | 50
    

    Ответ: 568 | 50

    Видео
    ✍ Решение:

      Проанализируем возможное решение:

    • Чтобы вычислить максимальное число пользователей, чьи файлы можно сохранить в архиве, необходимо брать файлы с наименьшим объемом , пока суммарный объем этих файлов меньше свободного объема диска. Т.е. для нижеуказанного примера, будем брать 30 + 40. Файл объемом 50 мы взять уже не сможем, так как 70 + 50 = 120, а это уже больше указанного объема диска (100):
    • 100 4
      80
      30
      50
      40
      
    • Таким образом, мы получили первый ответ - максимальное число пользователей, чьи файлы можно сохранить в архиве - ответ 2.
    • Далее необходимо вычислить максимальный размер имеющегося файла, который может быть сохранён в архиве. Для начала вспомним, что у нас оставался "запас" пространства диска при предыдущем расчете. Давайте вычислим этот запас:
    • 100 - 70 = 30
    • Т.е. мы можем добавить 30 наибольшему возможному числу, из выбранных чисел, чтобы полученная сумма не превысила этот запас. Самое большое число из выбранных - это 40 (30, 40):
    • 30 - 40 <= запаса (30)
      40 - 40 <= запаса (30) 
      50 - 40 <= запаса (30) 
      80 - 40 > запаса (30), не подходит
      
    • Таким образом, наибольшее подходящее число - максимальный размер файла - это 50.
    • Теперь построим алгоритм на языках программирования:

      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
      24
      25
      26
      27
      28
      29
      30
      31
      
      begin
        var f: text;
        assign(f, 'proba.txt');
        reset(f);
        var s, n: integer;
        read(f, s); // 100
        read(f, n);  //4  var (s, n) := ReadInteger2;
        var i := 0;
        var data: array of integer;
        data := new integer[n];
        while not EOF(f) do // 
        begin
          readln(f, data[i]); // var data:= ReadArrInteger(n); 
          i += 1;
        end;
        data.Sort;
        var summa := 0;
        var count := 0;
        for count := 0 to data.Length do
        begin
          if summa + data[count] > s then break;
          summa += data[count];
        end;
        print(count);
        var itog := 0;
        var zapas := s - summa;
        for i := 0 to data.Length do
          if data[i] - data[count - 1] <= zapas then
            itog := data[i] else break;
        print(itog)
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      
      f = open('26.txt')
      data = f.readlines() # массив строк , readlines
       
      s = data[0].split() # ['8200', '970']
      s = int(s[0]) # 8200 - объем св места на диске
      del(data[0]) # первая строка больше не нужна, удаляем ее
      for i in range(0, len(data)): # цикл для преобразование в int
          data[i]=int(data[i])
      data=sorted(data) # сортируем полученный массив для удобства работы
      summa = 0
      for count in range (0,len(data)):
          if summa + data[count] > s: break # если сумма больше - прерываем цикл
          summa += data[count] # формируем сумму, добавляя отсортированные элементы 
      # как только сумма превысила s, произойдёт выход из цикла по оператору break, 
      # а в переменной count останется количество добавленных значений
      print (count) # макс число файлов в архиве
      # вычисляем запас, который мы можем уменьшить с помощью замены одного выбранного значения на другое:
      zapas = s - summa
      # теперь выбираем из массива данных те значения, которые могут быть выбраны: 
      # разность между таким значением и наибольшим выбранным элементом data[count-1] должна быть не больше, чем  zapas:
      for i in range (0,len(data)):
          if data[i] - data[count-1] <= zapas:
              itog = data[i]
      print(itog)  # максимальный размер файла
      С++:

      1
      
       

    Ответ: 568 | 50


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

    Задание выполняется с использованием прилагаемых файлов

    Имеется набор данных, состоящий из пар положительных целых чисел.
    Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 3 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно.
    Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.
    Входные данные.
    Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.

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

    6
    1 3
    5 12
    6 9
    5 4
    3 3
    1 1

    Для указанных входных данных значением искомой суммы должно быть число 32.

    В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.

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

    Ответ: 127127 | 399762080
    ✍ Решение:

      Проанализируем возможное решение:

      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 f: text;
        assign(f, '27-b.txt');
        reset(f);
        var n: integer;
        read(f, n);
        var summa := 0; var minim := 10001;
        var a, b: integer;
        for var i := 1 to n do
        begin
          read(f, a); read(f, b);
          summa += max(a, b);
          var raznitsa := abs(a - b);
          if raznitsa mod 3 <> 0 then
            minim := min(minim, raznitsa); 
        end;
        if summa mod 3 <> 0 then
          print(summa)
        else
            print(summa - minim)
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      
      f = open ('27-b.txt') # f = open ('27-a.txt')
      n = int(f.readline())
      data = f.readlines()
      summa = 0
      minim = 10001 # для минимальной разницы
      for i in range(0, n):
          s = data[i].split()
          a = int(s[0])
          b = int(s[1])
          summa += max(a,b) # сумма максимумов из пар
          raznitsa = abs(a-b) # разница
          if raznitsa % 3 > 0:
              minim = min(minim,raznitsa)
      if summa % 3 != 0:
          print(summa)
      else:
          print(summa - minim)
      С++:

      1
      
       

    Ответ: 127127 | 399762080



     
    ЕГЭ по информатике -> демоверсия ЕГЭ 2021