Тренировка задания 15 ЕГЭ (15.9)

Решение 15 задания (Вариант 78, К. Поляков) :

На числовой прямой даны два отрезка: P=[6,16] и Q=[30,50]. Отрезок A таков, что формула

((x ϵ A) → (x ϵ Q)) ∨ (x ϵ P)

тождественно истинна, то есть принимает значение 1 при любом значении переменной x.

Какова наибольшая возможная длина отрезка A?

Ответ: 20


Тренировка задания 15 ЕГЭ (15.18)

Решение 15 задания (Вариант 110, К. Поляков) :

Элементами множеств А, P, Q являются натуральные числа, причём P = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}, Q = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50}.

((x ∈ A) → (x ∈ P)) ∧ ((x ∈ Q) → ¬(x ∈ A))

Известно, что выражение истинно (т. е. принимает значение 1) при любом значении переменной х.
Определите наибольшее возможное количество элементов в множестве A.

Ответ: 8


Lesson # 8. Dynamic memory. Arrays of pointers.

Theory

    Function template

  • A template variable is defined by declaring it before the beginning of a class or function:
  • template <typename T>
    int max(T a, T b) {
      if (a > b) { return a; }
         return b;
    }
  • Templated variables are checked at compile time, which allows for errors to be caught before running the program.
  • #include <iostream>
    using namespace std;
     
    template <typename T>
    T max(T a, T b) {
    	if (a > b) { return a; }
    	return b;
    }
    int main()
    {
    	cout << "max(3, 5): " << max(3, 5) << endl; // 5
    	cout << "max('a', 'd'): " << max('a', 'd') << endl; // d
    	cout << "max(\"Hello\", \"World\"): " << max("Hello", "World") << endl; // Hello
    	cout << "max(3, 5, 6): " << max(3, 5, 6) << endl; // error
     
    	system("pause");
    	return 0;
    }
  • A function template defines a family of functions.
  • Function and class templates should be defined only in the header file.
  • lib.cpp

    #include "lib.h"

    lib.h

    template<typename T>
    class My
    {
        My() { }
    T f(T a, T b);
    };
     
    template<typename T>
    T My::f(T a, T b)
    {
      return a + b;
    }
  • A function template by itself is not a type, or a function, or any other entity. No code is generated from a source file that contains only template definitions. In order for any code to appear, a template must be instantiated: the template arguments must be determined so that the compiler can generate an actual function.
  • An explicit instantiation definition forces instantiation of the function or member function they refer to. It may appear in the program anywhere after the template definition, and for a given argument-list, is only allowed to appear once in the program, no diagnostic required.
  • template<typename T>
    void f(T s)
    {
        std::cout << s << '\n';
    }
     
    template void f<double>(double); // instantiates f<double>(double)
    template void f<>(char); // instantiates f<char>(char), template argument deduced
    template void f(int); // instantiates f<int>(int), template argument deduced
  • Implicit instantiation: When code refers to a function in context that requires the function definition to exist, and this particular function has not been explicitly instantiated, implicit instantiation occurs. The list of template arguments does not have to be supplied if it can be deduced from context.
  • #include <iostream>
     
    template<typename T>
    void f(T s)
    {
        std::cout << s << '\n';
    }
     
    int main()
    {
        f<double>(1); // instantiates and calls f<double>(double)
        f<>('a'); // instantiates and calls f<char>(char)
        f(7); // instantiates and calls f<int>(int)
        void (*ptr)(std::string) = f; // instantiates f<string>(string)
    }

    1. A pointer to a one-dimensional array in dynamic memory

    int* p = new int[10];
    for (int* q = p; q<p+10; q++)
      *q = 1;
     
    for (int i=0; i<10; i++)
      p[i] = 1;
     
    delete [] p;

    For simple types, you can write delete p (the runtime subsystem knows that we allocated an array), but for classes this is an error.

    Errors related to using of dynamic memory

    Error 1. Accessing a section of dynamic memory that we have already returned using delete

    int* p = new int;
    *p = 777;
    delete p;
    *p = 666;
  • What to do?:
  • int* p = new int;
    *p = 777;
    delete p;
    p = nullptr; // !
    *p = 666;
  • Why it’s not enouph?:
  • int* p = new int;
    int * q = p;delete p;
    p = nullptr; // !
    *q = 666;
  • Error 2. We returned dynamic memory twice using delete
  • int* p = new int;
    *p = 777;
    delete p;delete p;
  • Error 3. Dynamic memory leak
  • int* p = new int[1000];
    *p = 777;// and forgot to delete!
  • Error 3a. Dynamic memory leak in the loop
  • for (int i = 0; i<100000; i++)
    {
      int* p = new int[1000];
      *p = 777;// and forgot to delete!
     
    }
  • Error 3b. Dynamic memory leak in the function.
  • void p()
    {
      int* p = new int[1000];
      *p = 777;// and forgot to delete!
    }
  • The rule. If dynamic memory is allocated in a function, then it must be returned in the same function. There are exceptions.
  • Two-dimensional arrays

  • A two-dimensional array is considered as a one-dimensional array of one-dimensional arrays
  • int a[3][4];
  • Two-dimensional rectangular arrays («matrices») are conveniently modeled using pointer arrays:
  • int ** mat = new int *[rows]; // future matrix of rows of rows

    Each element mat[i] of this array is a pointer, it should be initialized in a loop, assigning it the result new int [cols], where cols is the desired number of columns of the matrix.

  • The reference to the (i, j)-th element of the matrix looks like this: mat[i][j]. To iterate over the matrix, just as in the case of a regular array, you can use pointers.
  • It is necessary to empty (devastate) memory, it should be done in the reverse order: first, the memory for each row is released in the loop: delete [] mat[i]. And then the memory of the array of pointers mat: delete [] mat is released. This procedure should be executed as a function with one argument rows(number of rows).
  • Another example:

  • This is an array of three elements of type int [4]
  • a[i][j] ~ *(a[i] + j) ~ *(*(a + i) + j)

    Printing an array:

    void print(int a[][4], int m, int n)
    {
      for (int i=0; i<m; i++)
      {
        for (int j=0; j<n; j++)
        cout << a[i][j] << " ";
        cout << endl;
      }
    }

    Two-dimentional arrays and dynamic memory

  • In order to pass a two-dimensional array of arbitrary dimension to a function, it should be allocated in dynamic memory:
  • void print(int** a, int m, int n)
    {
      for (int i=0; i<m; i++)
      {
        for (int j=0; j<n; j++)
        cout << a[i][j]; // a[i][j] ~ *(*(a + i) + j)
        cout << endl;
      }
    }
    int main()
    {
    // allocation in memory
      int** p = new int*[3]; // pointer pointing to pointer (3 rows)
      for (int i=0; i<3; i++)
         p[i] = new int[4]; // 4 columns
      print(p,3,4);}
  • After using it in the function, the allocated memory must be returned:
  • int main()
    {
      int** p = new int*[3];
      for (int i=0; i<3; i++)
        p[i] = new int[4];
     
    print(p,3,4); // Нарисовать на доске
    // deallocation of memory:
    for (int i=0; i<3; i++)
      delete [] p[i];
    delete [] p;
    p = nullptr;
    }

    Stepwise two-dimensional dynamic arrays

    int main()
    {
      int** p = new int*[3];
     
      for (int i=0; i<3; i++)
        p[i] = new int[4];
     
      print(p,3,4);
      for (int i=0; i<3; i++)
        delete [] p[i];
      delete [] p;
      p = nullptr;
    }

Labs and Tasks

1. One-Dimensional Array In Dynamic Memory

Lab 1:
To do: Create a solution with two function templates. One of them inputs the elements of a one-dimensional array of a specified size, the other outputs the elements of a one-dimensional array of a given size. It is possible to create all the code in the main cpp file. Input and output the array elements of double type.

Note: The signature of the function templates should be as following:

template <typename T> 
void inputArr(T* arr, int &size);
 
template <typename T>
void printArr(const T* arr, int &size);

Expected output:

Lab 1:
Array[0] 1.1
Array[1] 2.1
Array[2] 3.2
Array[3] 4.1
Array[4] 5.4

1.1 2.1 3.2 4.1 5.4 

✍ How to do:

  • To perform the lab, create an empty console application with a name Lesson8. Add file: L8Lab1main.cpp.
  • Include all the necessary libraries.
  • Create int main function that returns 0.
  • Above the main function, add the function template code for entering the elements of an array. The function will have two parameters — a pointer to the array and a reference to a variable that stores the size of the array.
  • template <typename T> 
    void inputArr(T* arr, int &size) { // arr is a pointer to the array of any type
    	for (int i = 0; i < size; i++) {
    		cout << "Array[" << i << "] ";
    		cin >> arr[i]; // dereference of the pointer arr
    	}
    }
    
  • In the main function, initialize the variable that stores the size of the array (the array will have 5 elements), and declare a pointer to a new array of double type:
  •   int size = 5;
      double* myArray = new double[size];
    
  • Call the function:
  • inputArr(myArray, size);
    
  • Above the main function, add the function template code to output the elements of the array:
  • template <typename T>
    void printArr(const T* arr, int &size) {
    	for (int i = 0; i < size; i++) {
    		//cout << arr[i] << " "; // dereference way 1:
    		cout << *(arr + i) << " "; //dereference way 2:
    	}
    }
    
    Use one of two ways to dereference the pointer.
  • Call the function in the main method:
  • printArr(myArray, size);
    
  • Once the dynamic array is allocated in the memory, it must be deallocated. Let's deallocate the array in the main:
  • delete[]myArray;
    myArray = NULL;
    
    After the delete operator, the myArray pointer is allocated to something that doesn't belong to our program. To prevent the array of pointers from pointing to any address, you must assign a NULL value.
  • Run the program.
Task 1:

To do: An array of integers (A) is given. Create an array in which the number 0 is inserted instead of the elements, the last digit of which is equal to 0. In this task, you need to use dynamic memory (new / delete). Make a template function to print the array.

Note 1: Make sure that in the main program, after printing the resulting array, you did not forget to deallocate memory (delete []).

Note 2: The signature of the function should be as follows:

void MakeArrayWithZero(int* a, int& size);

Where a is a given array, and size is a size of the array.

Note 3: Template function to print the array must be in header file and have the following signature:

template<typename T>
void printArray(T const * arr, int size, char delim = ' ') {
  ...
}

Expected output:

Task 1:
Array before the task is done:
1 20 30 4 5 
Result:
1 0 0 4 5

[Solution and Project name: Lesson_8task1, file name L8Task1main.cpp, L8Task1imp.cpp, L8Task1.h]

Two-dimensional arrays

Lab 2:

To do: Define the function for creating a matrix of specified dimensions, all elements of which are equal to a given number:
header file:

int ** createMatrix(int rows, int cols, int value = 0);

The default value of 0 for the value parameter should be specified only in the header file. In the cpp file, the header contains three parameters in the usual form:
implementation file:

int ** createMatrix(int rows, int cols, int value) {
}

The default value indicates that the function can be called with two arguments, then the value of the value parameter will be the number 0.

Note: To print the matrix you should create one more function with a signature:

void printMatrix(int ** mat, int rows, int cols);

Expected output:

Lab 2:
matrix 5 by 5:
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

[Solution and Project name: Lesson_8Lab2, file name L8Lab2main.cpp, L8Lab2imp.cpp, L8Lab2.h]

✍ How to do:

  1. To perform the lab, create an empty console application with a name Lesson8Lab2.
  2. Include all the necessary libraries and header file.
  3. Since we must create a matrix in the function, let's start with a function code. Open the header file and add the signature of the function:
  4. #pragma once
    
    #ifndef HEADER_H
    #define HEADER_H
    
    int ** createMatrix(int rows, int cols, int value = 0);
    
    #endif
    
  5. Then, open the implementation file and add the function:
  6. // ...
    int ** createMatrix(int rows, int cols, int value) {
      //...
    }
    
  7. First of all, we should allocate the memory for our two-dimensional array (matrix). To do it, add the code into the function:
  8. int** res = new int*[rows];
    for (int i = 0; i < rows; i++)
    	{
    		res[i] = new int[cols];
    		for (int j = 0; j < cols; j++) {
    			res[i][j] = value;
    		}
    	}
    
    In the first line we declare a pointer that points to the addresses of rows which are the pointers themselves pointing to the addresses of columns. So we allocate the memory for the matrix.
    In the line #4 for each row we allocate the memory for the columns. The number of rows and columns we take from the arguments.
  9. The function will return the matrix, so add the code:
  10.   return res;
    } // end of function scope
    
  11. Now, we can turn to the main file and ain function to call this function we've created.
  12. Since our function will return a created matrix, we should create a variable to store that matrix and assign the result of our function to it.
  13. int main() {
      // create a matrix with 4 rows and 5 columns each element equals 0:
      int** matrix = createMatrix(4, 5, 0);
      //...
    }
    
  14. Try to run the program and make sure that there are no errors.
  15. After, we're going to create a function to output the elements of the matrix. There will be three arguments there - to accept the matrix itself and the number of columns and rows. Add the code into the implementation file:
  16. void printMatrix(int ** mat, int rows, int cols) {
    	for (int i = 0; i < rows; i++) {
    		for (int j = 0; j < cols; j++) {
    			cout << mat[i][j] << " ";
    		}
    	cout << endl;
    	}
    }
    
  17. Add the signature of the function into header file. Do it yourself.
  18. Run the program and make sure that there are no errors.
  19. Once a dynamic array was created, we should deallocate the memory when the task with that array is done. Let's create a function to deallocate the memory. Add the code of the function:
  20. void freeMemory(int ** mat, int rows) {
    	for (int i = 0; i < rows; i++) {
    		delete[] mat[i];
    	}
    	delete[] mat;
    	mat = NULL;
    }
    
    Since we need to use the pointers, we should know the number of rows only, it is passed in from the main program as argument.
  21. Add the signature of the function to the header file and call the function in the main source file.
Task 2:

To do: Create a function to find the minimum and maximum values of the matrix. To do the task you can use the similar functions from lab # 2 (to create a matrix, to print it out and to deallocate the memory). The elements of the matrix must be randomly generated. The signature of the function to find min and max should be as follows:

void matrixMinMax(int ** mat, int rows, int cols, int &min, int &max);

Note: to have randomly generated elements you should include the following library:

#include <ctime>
// ...
srand(time(0));
//.. inside nested loops:
array_name[i][j] = 1 + rand() % 10;

Expected output:

Task 2:
matrix 4 by 5:
5 4 0 7 0
0 8 0 1 2
0 5 0 7 0
4 0 0 9 0

max = 9  min = 0

[Solution and Project name: Lesson_8task2, file name L8Task2main.cpp, L8Task2imp.cpp, L8Task2.h]

Task 3:

To do: A square matrix of integer elements is given. Calculate the sum of the elements of its main diagonal. Make sure that in the main program, after the matrix returned by functions is no longer needed, the corresponding memory is freed.

Expected output:

Task 3:
matrix:
8 3 3 6
6 4 9 8
6 1 9 6
4 5 1 5

sum = 26

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

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

группа fb facebook

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

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

На рисунке схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).

1 2 3 4 5 6 7
1 3 4
2 3 12 13
3 10 11
4 10 9 7
5 4 12 11 9 8 6
6 13 8 5
7 7 6 5

Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе.
Определите, какова сумма протяжённостей дорог из пункта Б в пункт В и из пункта Г в пункт Д.
В ответе запишите целое число.

Ответ: 20
🎦


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

Миша заполнял таблицу истинности логической функции F

¬(y → (x ≡ w)) /\ (z → x)

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

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

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

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

Ответ: wxyz
  
🎦


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

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

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

ID операции Дата ID магазина Артикул Тип операции Количество упаковок, шт. Цена, руб./шт.

Таблица «Товар» содержит информацию об основных характеристиках каждого товара. Заголовок таблицы имеет следующий вид.

Артикул Отдел Наименование Ед. изм. Количество в упаковке Поставщик

Таблица «Магазин» содержит информацию о местонахождении магазинов. Заголовок таблицы имеет следующий вид.

ID магазина Район Адрес

На рисунке приведена схема указанной базы данных.

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

Ответ: 966
 
🎦


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

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

Ответ: 100
🎦


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

На вход алгоритма подаётся натуральное число 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.
  • ✎ Решение с использованием программирования:

    PascalAbc.NET:

    uses school;
     
    begin
      var n_ := 1;
      while True do
      begin
        var n := n_;
        var ost := bin(n).CountOf('1') mod 2; 
        //в двоичной с.с. добавляем разряд (*2) и остаток к этому разряду (+ost)
        n := 2 * n + ost; 
         // получаем остаток при делении на 2 :
        ost := bin(n).CountOf('1') mod 2; 
        n := 2 * n + ost;
        if n > 77 then
        begin
          println(n_);
          break
        end;
        n_ += 1;
      end;
    end.
    Python:

    n_ = 1
    while True:
        n = n_
        r = str(bin(n))
        r = r[2:]
        for i in range(2):
            if r.count('1') % 2 == 0:
                r+='0'
            else:
                r+='1'
     
        n = int(r, base=2)
        if n > 77:
            print(n_,n)
            break
        n_+=1

Ответ: 19

🎦 -> аналитическое решение
  

 
🎦 -> решение с программированием (на Паскале) подобного задания
  


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

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

Паскаль:

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

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

s = int(input())
s = s // 10 
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;
 s = s / 10;
 n = 1 ;
 while (s < 51) { s = s + 5; n = n * 2; }
 cout << n << endl;
 return 0;
}

Ответ: 259
  

✍ Решение:

    ✎ Способ 1 (программный):
    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 s1 := 509;
      while true do // внешний цикл, бесконечный
      begin
        var s := s1;
        s := s div 10;
        // --- код из условия задания --- //
        var n := 1;
        while s < 51 do
        begin
          s := s + 5; 
          n := n * 2;
          if n = 64 then // если найдено, то выводим соответствующее s
          begin
            print(s1); 
            exit;  // выход из бесконечного цикла 
          end;
        end;
        s1 := s1 - 1; 
      end;
    end.

    Пояснение:

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

     
    Python:

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

     

Ответ: 259

🎦


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

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

Ответ: 16
  
🎦


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

Все четырёхбуквенные слова, в составе которых могут быть только буквы Л, Е, М, У, Р, записаны в алфавитном порядке и пронумерованы, начиная с 1.
Ниже приведено начало списка.

1. ЕЕЕЕ
2. ЕЕЕЛ
3. ЕЕЕМ
4. ЕЕЕР
5. ЕЕЕУ
6. ЕЕЛЕ
…

Под каким номером в списке идёт первое слово, которое начинается с буквы Л?

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

🎦


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

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

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

Ответ: 2453
🎦


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

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

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

Ответ: 1

🎦


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

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

Ответ: 600
🎦


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

Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах 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 задание. Демоверсия варианта ЕГЭ по информатике 2022, ФИПИ:

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

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


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

Значение арифметического выражения:

3*438 + 2*423 + 420 + 3*45 + 2*44 + 1 

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

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

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

PascalABC.NET:

begin
  var numb: Biginteger; 
  numb := 3*Biginteger.Pow(4,38) + 2*Biginteger.Pow(4,23)+Biginteger.Pow(4,20) +
 3*Biginteger.Pow(4,5) +2*Biginteger.Pow(4,4) +1;
  var digit: biginteger;
  var n := 0;
  while numb > 0 do
  begin
    digit := numb mod 16;
    if digit = 0 then n += 1;
    numb := numb div 16
  end;
  print(n)
end.
Python:

x = 3*4**38 + 2*4**23 + 4**20+3*4**5 +2*4**4 +1
k = 0
while x:
    if x % 16 == 0: k += 1
    x //= 16
print( k )
С++:

 

✎ Решение аналитическим способом:

  • По возможности приведем каждое слагаемое к степеням 16. Учтем, что:
  • 4n=16n/2
  • Получим:
  • 3*1619 + 2*(41*1611) + 3*(41*162) + 2*162 + 1
  • Далее рассуждаем так: количество нулей можно найти, если из общего количества цифр в результирующем числе вычесть количество не нулей (любых других цифр).
  • Общее количество цифр найдем из самого большого слагаемого 3*1619:
  • Формула: 16n=10..0[n штук]16 (в 16 с.с.)
    3*1619 = 3*10..016 -> 19 нулей + 1 другая цифра(3), т.е. всего 20 цифр

  • Рассмотрим другие слагаемое, используя аналогичную формулу. Будем считать в них цифры, отличные от нуля (другая цифра):
  • 2*(41*1611) = 2*(4*10..0[11 штук]16=80..0[11 штук]16 -> одна другая цифра
    41*162 = 4*10016 = 400 -> одна другая цифра
    3*(41*162) = 3*4*10016 = С0016 -> одна другая цифра
    2*162 =2*10016 = 20016 -> одна другая цифра
    1 -> одна другая цифра
  • Итого получаем 5 других цифр, отличных от 0. Отнимем из общего количества цифр и получим количество нулей:
  • 20-5=15

Ответ: 15

🎦


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

На числовой прямой даны два отрезка: D = [17; 58] и C = [29; 80].
Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение

(x ∈ D) → ((¬(x ∈ C) /\ ¬(x ∈ A)) → ¬(x ∈ D))

истинно (т.е. принимает значение 1) при любом значении переменной х.

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

🎦


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

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

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

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

Ответ: 2802 1990
 
✍ Решение:

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

    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
    
    begin
      var f: text;
      var i, k, max, len: integer;
      assign(f, '17.txt');
      reset(f);
      var data: array of integer;
      data := new integer[100000];
      i := 0;
      while not EOF(f) do
      begin
        readln(f, data[i]);
        inc(i); 
      end;
      len := i - 1; k := 0; max := -100;
      for i := 1 to len do
      begin
        if (data[i] mod 3 = 0) or (data[i - 1] mod 3 = 0) then
        begin
          inc(k);
          if data[i] + data[i - 1] > max then
            max := data[i] + data[i - 1];
        end;
      end;
      print(k, max)
    end.

    Питон:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    f = open('17.txt')
    data =[int(x) for x in f]
    k = 0
    m = -100
    for i in range(len(data)-1):
        if data[i]%3==0 or data[i+1]%3==0:
            k+=1
            m = max(m, data[i]+data[i+1])
    print (k,m)

    C++:

    1
    
     

🎦


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

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

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

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

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

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

Ответ: 721 640
🎦


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

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

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

Ответ: 14

✍ Решение 1:

  • Ваня может выиграть первым ходом (как бы ни играл Петя), если в куче будет S = 14 камней. Тогда после первого хода Пети в куче будет 15 или 28 камней. В обоих случаях Ваня удваивает кучу и выигрывает в один ход.
  • S = 14
    Петя: 14 + 1 = 15  выигрышная позиция (см. п. а). Выигрывает Ваня
    Петя: 14 * 2 = 28   выигрышная позиция (см. п. а). Выигрывает Ваня
    

    14 - проигрышная позиция

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


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

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

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

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

    • Возможные значения S: 7, 13. В этих случаях Петя, очевидно, не может выиграть первым ходом. Однако он может получить кучу из 14 камней (из задания № 19 мы знаем, что это проигрышная позиция): в первом случае удвоением, во втором - добавлением одного камня. Эта позиция разобрана в задании 19. В ней игрок, который будет ходить (теперь это Ваня), выиграть не может, а его противник (то есть Петя) следующим ходом выиграет.
    • S = 7
      Петя: 7 * 2 = 14  проигрышная позиция (см. п. 1 б). Выигрывает Петя
      S = 13
      Петя: 13 + 1 = 14 проигрышная позиция (см. п. 1 б). Выигрывает Петя
      

      7, 13 - выигрышные позиции со второго хода

    Ответ: 7 13

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


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

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

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

    ✍ Решение:

    • Возможные значения S: 12. После первого хода Пети в куче будет 13 или 24 камня. Если в куче их станет 24, Ваня удвоит количество камней и выиграет первым ходом. Ситуация, когда в куче 13 камней, разобрана в задании 20. В этой ситуации игрок, который будет ходить (теперь это Ваня), выигрывает своим вторым ходом.
    • S = 12
      Петя: 12 + 1 = 13  
      Ваня: 13 + 1 = 14 проигрышная позиция (см. задание 19). Выигрывает Ваня вторым ходом!
      

    Ответ: 12


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

    Ниже на четырёх языках программирования записан алгоритм. Получив на вход число 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 задание. Демоверсия варианта ЕГЭ по информатике 2022, ФИПИ:

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

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

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

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

    • Сначала найдём количество программ для перехода от числа 1 к числу 10, а затем от числа 10 к 20.
    • Будем использовать разные рекуррентные формулы для чётных и нечётных N.
    • Напишем программу, реализующую алгоритм поиска результата, вычисления по рекуррентным формулам организуем с помощью рекурсии.
    • Рекурсивная функция, которая возвращает количество программ для преобразования числа start в число x:
    • Паскаль:

      function func( start, x: integer ): integer;
      var k: integer;
      begin
        if x < start then 
          func := 0 // если число x меньше нач. значения, кол-во программ равно 0 
        else 
          if x = start then 
            func := 1 // если число x = нач. значению, кол-во программ равно 1 
        else 
          begin
          k := func( start, x-1 ); //учитываем кол-во программ предыдущего числа
          // если число чётное, нужно добавить ещё кол-во программ для числа x//2: 
          if x mod 2 = 0 then 
            k := k + func( start, x div 2 );
          func := k;
        end;
      end;
       
      begin
       writeln( func(1,10) * func(10,20) );
      end.

    Ответ: 28


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

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

     
    Текстовый файл состоит из символов P, Q, R и S.
    Определите максимальное количество идущих подряд символов, среди которых нет идущих подряд символов P.
    Для выполнения этого задания следует написать программу.

    Ответ: 188

    ✍ Решение:

      Паскаль:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      
      var
        f: text;
        i, k, max: integer;
        s: string;
       
      begin
        assign(f, '24.txt');
        reset(f);
        readln(f, s);
        max := 1;
        k := 1; // кол-во подряд идущих без PP
        for i := 2 to length(s) do
        begin
          if (not ((s[i] = 'P') and (s[i - 1] = 'P'))) 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
      12
      
      f=open('24.txt')
      s=f.readline()
      m=1
      k=1
      for i in range(2,len(s)):
          if not(s[i]=='P' and s[i-1]=='P'):
              k+=1
              if k > m:
                  m = k
          else:
              k=1
      print(m)

     


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

    Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то значение M считается равным нулю.
    Напишите программу, которая перебирает целые числа, бо́льшие 700 000, в порядке возрастания и ищет среди них такие, для которых значение M оканчивается на 8. Выведите первые пять найденных чисел и соответствующие им значения M.

    Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение М.
    Строки выводятся в порядке возрастания найденных чисел.
    Количество строк в таблице для ответа избыточно.

      
    Ответ:

    700005 233338
    700007 100008
    700012 350008
    700015 140008
    700031 24168

    ✍ Решение:


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

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

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

    Входные данные.
    В первой строке входного файла находятся два числа: 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 задание. Демоверсия варианта ЕГЭ по информатике 2022, ФИПИ:

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

      
    Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 43. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.

    Входные данные
    Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 10 000 000). Каждая из следующих N строк содержит одно натуральное число, не превышающее 10 000.

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

    7
    1
    3
    4
    93
    8
    5
    95

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

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

    Ответ: 185 329329
    ✍ Решение:



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

    Задание 14 ОГЭ информатика по теме «Электронные таблицы Excel»

    На уроке рассмотрен материал для подготовки к ОГЭ по информатике, разбор 14 задания. Объясняется тема решения заданий в электронный таблицах Excel.

    Дальше — больше… Задание 14 ОГЭ информатика по теме «Электронные таблицы Excel»

    Решение 7 задания ОГЭ по информатике (7.1) про доступ к файлу

    Решение задания 7.1. Демонстрационный вариант ОГЭ 2021:

    Доступ к файлу rus.doc, находящемуся на сервере obr.org, осуществляется по протоколу https. Фрагменты адреса файла закодированы цифрами от 1 до 7. Запишите в ответе последовательность этих цифр, кодирующую адрес указанного файла в сети Интернет.

    Запишите последовательность этих букв, кодирующую адрес указанного файла в сети Интернет.

    1) obr.
    2) /
    3) org
    4) ://
    5) doc
    6) rus.
    7) https
    

    ✍ Решение:
     

    • Поскольку файл находится на сервере, т.е. в этом случае в сети Интернет, то для начала определим протокол, поскольку он всегда находится на первом месте. Выбираем протокол под пунктом 7https.
    • https
      7
      
    • После протокола всегда следует разделитель :// (пункт 4):
    • https://
       7   4
      
    • Далее всегда следует имя сервера — по заданию сервер obr.org. Соединяем пункты 1 и и добавляем к адресу:
    • https://obr.org
       7   4  1   3 
      
    • Файл в адресе всегда находится на последнем месте. По заданию файл имеет имя rus.doc, ему соответствуют 6 и 5:
    • https://obr.org...rus.doc
       7   4  1   3 ...  6    5
      
    • Между именем файла и названием сервера должен находиться символ / — это как раз единственный оставшийся пункт — 2:
    • https://obr.org/rus.doc
       7   4  1   3 2  6    5
      

    Ответ: 7413265

    Вариант №5 с сайта К. Полякова

    Решение вариант №5 ЕГЭ с сайта Константина Полякова

    Задание 1:

    На рисунке справа схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о длинах этих дорог (в километрах).

    вариант 5 задание 1 Поляков решение
    Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе.
    Определите длину кратчайшего пути из пункта Г в пункт В.

    ✍ Решение:

      Ответ: 25


      Задание 2:

      Логическая функция F задаётся выражением

      (x ≡ ¬z) → ((x ∨ w) ≡ y)


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

      ✍ Решение:

        Программирование:

        PascalABC.net:

        1
        
         
        Python:

        1
        2
        3
        4
        5
        6
        7
        8
        
        print('x y z w')
        for x in 0, 1:
          for y in 0, 1:
            for z in 0, 1:
              for w in 0, 1:
                F = (x == (not z)) <= ((x or w)==y)
                if not F:              
                      print(x, y, z, w)
        С++:

        1
        
         

      Ответ: xwyz


      Задание 3:

      В фрагменте базы данных представлены сведения о родственных отношениях.
      Определите мужчину, который впервые стал отцом в самом раннем возрасте, и запишите в ответе его идентификатор (ID).

      ✍ Решение:

        Ответ: 367


        Задание 4:

        По каналу связи передаются сообщения, содержащие только семь букв: А, Б, К, О, Н, Р, Я. Для передачи используется двоичный код, удовлетворяющий условию Фано. Кодовые слова для некоторых букв известны:

        А – 010, 
        Р – 011, 
        Я – 10 

        Какое наименьшее количество двоичных знаков потребуется для кодирования слова КОРАН?

        ✍ Решение:

        • Отобразим с помощью дерева известные коды:
        • Остается расположить 4 кода. Поскольку в слове КОРАН все буквы встречаются по одному разу, то расположение букв на дереве не так важно. Но буква Б не встречается, поэтому ее можно располагать в дереве на нижние уровни:
        • Посчитаем количество бит в каждой букве слова:
        • К(3) + О(4) + Р(3) + А(3) + Н(2) = 15
          

        Ответ: 15


        Задание 5:

        На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

        1) Строится двоичная запись числа N.
        2) Затем справа дописываются два разряда: символы 01, если число N чётное, и 10, если нечётное.
        Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.

        Укажите минимальное число R, большее 81, которое может являться результатом работы этого алгоритма. В ответе это число запишите в десятичной системе.

        ✍ Решение:

        • Будем переводить числа в 2-ю с.с., начиная с 82, и рассматривать их на соответствие алгоритму:
        • 82 = 01010010 - N четное, должно было добавиться 01
          83 = 01010011 - в конце не может быть "11"
          84 = 01010100 - в конце не может быть "00"
          85 = 01010101 - N нечетное, должно было добавиться 10
          86 = 01010110 - N нечетное, все верно!
          

        Ответ: 86


        Задание 6 (А.Г. Минак):

        Определите, при каком наименьшем целом введённом значении переменной d программа выведет число 192.

        PascalABC.net:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        
        var s, n, d: integer;
        begin
          readln (d);
          s := 0;
          n := 0;
          while n < 200 do
          begin
            s := s + 64;
            n := n + d
          end;
          writeln(s)
        end.
        Python:

        1
        2
        3
        4
        5
        6
        7
        
        d = int(input())
        s = 0
        n = 0
        while n < 200:
          s = s + 64
          n = n + d
        print(s)
        С++:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        
        #include <iostream>
        using namespace std;
        int main() { 
        int d, s = 0, n = 0;
        cin >> d;    
        while (n < 200) {
          s = s + 64;
          n = n + d;
          }
        cout << s << endl;
        return 0;
        }

        ✍ Решение:

          Программирование:

          PascalABC.net:

          1
          
           
          Python:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          
          d = 1
          while True:  # внешний цикл, бесконечный
            d1 = d 
            # --- код из условия задания --- 
            s = 0
            n = 0
            while n < 200:
              s = s + 64
              n = n + d1
            # --- конец кода из условия задания --- 
            if s == 192:
              print(d1)
              break
            d += 1
          С++:

          1
          
           

        Ответ: 67


        Задание 7:

        Музыкальный фрагмент был записан в формате моно, оцифрован и сохранён в виде файла без использования сжатия данных. Размер полученного файла – 70 Мбайт. Затем тот же музыкальный фрагмент был записан повторно в формате стерео (двухканальная запись) и оцифрован с разрешением в 4 раза выше и частотой дискретизации в 3,5 раза меньше, чем в первый раз. Сжатие данных не производилось.
        Укажите размер файла в Мбайт, полученного при повторной записи.

        ✍ Решение:

        • Выпишем все известные данные до и после оцифровки:
        • S = 1 I = 70Мб
           
          S = 2 
          B > 4 
          F < 3.5
          
        • Получим изменение объема файла:
        • I2 = I1*2*4:3.5 = 70*2*4:3.5 = 160 Мб
          

        Ответ: 160


        Задание 8 (А.М. Кабанов):

        Юрий составляет 4-буквенные слова из букв П, Р, И, К, А, З. Каждую букву можно использовать не более одного раза, при этом в слове нельзя использовать более одной гласной.

        Сколько различных кодов может составить Юрий?

        ✍ Решение:

        • Рассмотрим все варианты расположения гласной буквы:
        • 2  4  3  2
          г
          4  2  3  2
             г
          4  3  2  2
                г
          4  3  2  2
                   г
          
          Получаем: 48 * 4 = 192
          
        • Остался вариант, когда гласных нет:
        • 4  3  2  1 = 24 
        • Итого: 24 + 192 = 216

        Ответ: 216


        Задание 9 (А. Кабанов):

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

        ✍ Решение:

          Ответ: 12


          Задание 10 (А.Н. Носкин):

          С помощью текстового редактора определите, сколько раз, не считая сносок, встречаются личные местоимения (я, ты, он, она, оно), без учета регистра в тексте А.П. Чехова «Воры» (файл 10-1.docx). В ответе укажите только число.

          ✍ Решение:

            Ответ: 141


            Задание 11:

            При регистрации в компьютерной системе каждому пользователю выдаётся пароль, состоящий из 6 символов и содержащий только символы из 7-буквенного набора А, В, Е, К, М, Н, О. В базе данных для хранения сведений о каждом пользователе отведено одинаковое и минимально возможное целое число байт. При этом используют посимвольное кодирование паролей, все символы кодируются одинаковым и минимально возможным количеством бит. Кроме собственно пароля для каждого пользователя в системе хранятся дополнительные сведения, для чего отведено 10 байт.
            Определите объём памяти в байтах, необходимый для хранения сведений о 100 пользователях.

            ✍ Решение:

            • Мощность алфавита 7, соответственно имеем 23 > 7, т.е. 3 бита для кодирования 1 символа.
            • Для кодирования 6 символов пароля потребуется 6 * 3 = 18 бит. Так как для хранения паролей отведено одинаковое число байт, то для 18 бит потребуется 3 байта (8*3=24, 24>18).
            • Всего на одного пользователя, включая дополнительные сведения, потребуется: 3 + 10 = 13 байтов.
            • Для хранения сведений о 100 пользователях потребуется 13 * 100 = 1300 байтов.

            Ответ: 1300


            Задание 12 (С.С. Поляков):

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

            1. заменить (v, w)
            2. нашлось (v)

            Дана программа для исполнителя Редактор:

            НАЧАЛО
              ПОКА нашлось (111)
                заменить (111, 2)
                заменить (222, 3)
                заменить (333, 1)
              КОНЕЦ ПОКА
            КОНЕЦ

            Какая строка получится в результате применения приведённой программы к строке вида 1…13…3 (2018 единиц и 2050 троек)?

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              2
              3
              4
              5
              6
              
              s = 2018*'1'+2050*'3'
              while "111" in s:
                s = s.replace( "111", "2", 1 )
                s = s.replace( "222", "3", 1 )
                s = s.replace( "333", "1", 1 )
              print(s)
              С++:

              1
              
               

            Ответ: 332113


            Задание 13:

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

            ✍ Решение:

              задание 13 егэ решение

            Ответ: 30


            Задание 14 (М.В. Кузнецова):
            Значение арифметического выражения:

            95 + 325 – 20

            записали в системе счисления с основанием 3.
            Найдите сумму цифр в этой записи. Ответ запишите в десятичной системе.

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              2
              3
              4
              5
              6
              
              x = 9**5 + 3**25 - 20
              s = 0
              while x:
                 s+=x % 3 
                 x //= 3 
              print( s )
              С++:

              1
              
               

            Ответ: 18


            Задание 15:

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

            (ДЕЛ(x, A) ∧ ¬ДЕЛ(x, 36)) → ¬ДЕЛ(x, 12)

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

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              2
              3
              4
              5
              6
              7
              
              for A in range(1,500):
                 OK = 1
                 for x in range(1,1000):
                    OK *= ((x % A == 0) and (x % 36 != 0))<=(x % 12!= 0)
                 if OK:
                    print( A )
                    break
              С++:

              1
              
               

            Ответ: 9


            Задание 16:

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

            F(n) = n*n + 3*n + 9, при n ≤ 15
            F(n) = F(n-1) + n - 2, при n > 15, кратных 3
            F(n) = F(n-2) + n + 2, при n > 15, не кратных 3

            Определите количество натуральных значений n из отрезка [1; 1000], для которых все цифры значения F(n) чётные.

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              
              def F( n ):
                 if n <= 15: 
                    return n*n + 3*n + 9
                 if n>15 and n%3==0:
                    return F(n-1) + n - 2
                 if n>15 and n%3!=0:
                    return F(n-2) + n + 2
              k=0
              for i in range(1,1001):
                 x = F(i)
                 flag=True
                 while x>0:
                    digit = x%10
                    if digit%2 != 0: flag = False
                    x//=10
                 if flag:  
                    k+=1
              print (k)
              С++:

              1
              
               

            Ответ: 33


            Задание 17:

            Рассматривается множество целых чисел, принадлежащих отрезку [1100;11000], которые делятся на 6 и не делятся на 7, 13, 17 и 23.
            Найдите количество таких чисел и максимальное из них. В ответе запишите два числа через пробел: сначала количество, затем максимальное число.

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              2
              3
              
              a = [n for n in range(1100,11000+1) 
                   if (n%6==0 and n%7!=0 and n%13!=0 and n%17!=0 and n%23!=0)]
              print(len(a),max(a))
              С++:

              1
              
               

            Ответ: 1178 10992


            Задание 18:

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

            ✍ Решение:

            Ответ: 1320 522


            Задание 19, 20, 21 (А.Н. Носкин):

            Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч один камень или увеличить количество камней в куче в два раза. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 40. Победителем считается игрок, сделавший последний ход, т. е. первым получивший позицию, в которой в кучах будет 40 или больше камней.
            В начальный момент в первой куче было 9 камней, во второй куче – S камней, 1 ≤ S ≤ 30. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
            Ответьте на следующие вопросы:
            Вопрос 1 (задание 19). Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Назовите минимальное значение S, при котором это возможно.
            Вопрос 2 (задание 20). Найдите два таких значения S, при которых у Пети есть выигрышная стратегия, причём Петя не может выиграть первым ходом, но может выиграть своим вторым ходом независимо от того, как будет ходить Ваня. Найденные значения запишите в ответе в порядке возрастания.
            Вопрос 3 (задание 21). Сколько существует значений S, при которых у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, и при этом у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:
              Задание 19:

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              
              def f(x,y,p):
                  if x+y>=40 and p==3:
                      return 1
                  elif x+y<40 and p==3:
                      return 0
                  else:
                      return f(x+1,y,p+1)+f(x*2,y,p+1)+f(x,y+1,p+1)+f(x,y*2,p+1)
              for i in range (1,1000):
                  if f(9,i,1):
                      print(i)
                      break

              Ответ:

              4

              Задание 20:

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              
              def f(x,y,p):
                  if x+y>=40 and p==4:
                      return 1
                  elif x+y<40 and p==4:
                      return 0
                  elif x+y>40:
                      return 0
                  elif p%2==1:
                      return f(x+1,y,p+1)+f(x*2,y,p+1)+f(x,y+1,p+1)+f(x,y*2,p+1)
                  else:
                      return f(x+1,y,p+1)*f(x*2,y,p+1)*f(x,y+1,p+1)*f(x,y*2,p+1)
              for i in range (1,1000):
                  if f(9,i,1):
                      print(i)

              Ответ:

              4
              3
              4 уже было в 19, убираем
              14
              15 - лишнее
              

              Задание 21:

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              
              def f(x,y,p):
                  if x+y>=40 and (p==3 or p==5):
                      return 1
                  elif x+y<40 and p==5:
                      return 0
                  elif x+y>40:
                      return 0
                  elif p%2==0:
                      return f(x+1,y,p+1)+f(x*2,y,p+1)+f(x,y+1,p+1)+f(x,y*2,p+1)
                  else:
                      return f(x+1,y,p+1)*f(x*2,y,p+1)*f(x,y+1,p+1)*f(x,y*2,p+1)
              for i in range (1,1000):
                  if f(9,i,1):
                      print(i)

              Ответ:

              14 уже было в 20
              15 уже было в 20
              значит, ответ 0
              
              С++:

              1
              
               

            Ответ:

            19: 4
            20: 3  14
            21: 0
            

            Задание 22:

            Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 15.

            PascalABC.net:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            
            var x, a, b: integer;
            begin
              readln(x);
              a:=0; b:=1;
              while x > 0 do begin
                a:= a + 1;
                b:= b*(x mod 10);
                x:= x div 10;
              end;
              writeln(a); write(b);
            end.
            Python:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            
            x = int(input())
            a = 0 
            b = 1
            while x > 0: 
              a = a + 1
              b = b*(x % 10)
              x = x // 10
            print(a)
            print(b)
            СИ:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            
            #include <stdio.h> 
            int main(void)
            {
             int a, b, x; 
             scanf(%d″, &x);
             a = 0; b = 1;
             while (x > 0) {
               a = a + 1;
               b = b*(x % 10);
               x = x / 10;
             }
             printf(%d\n%d″, a, b);
            }

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              
              for x_ in range(1,1001):  
                x = x_
                a = 0 
                b = 1
                while x > 0: 
                  a = a + 1
                  b = b*(x % 10)
                  x = x // 10  
                if a==3 and b==15:
                  print(x_)
                  break
              С++:

              1
              
               

            Ответ: 135


            Задание 23:

            Исполнитель Калькулятор преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:

            1. Прибавить 1
            2. Прибавить 3
            3. Умножить на 4

            Программа для исполнителя Калькулятор – это последовательность команд.
            Сколько существует программ, для которых при исходном числе 1 результатом является число 18?

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              
               
              С++:

              1
              
               

            Ответ: 572


            Задание 24:

            Текстовый файл 24-s1.txt состоит не более чем из 106 заглавных латинских букв (A..Z). Текст разбит на строки различной длины.
            Определите количество строк, в которых буква K встречается чаще, чем буква U.

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              2
              3
              4
              5
              6
              7
              8
              
              f= open("24-s1.txt")
              k = 0 # счетчик строк 
              while True: # бесконечный цикл
                  s = f.readline() # считываем очередную строку
                  if not s: break # если строка пустая (т.е. достигнут конец файла), выходим
                  if s.count("K") > s.count("U"):
                      k +=1
              print(k)
              С++:

              1
              
               

            Ответ: 470


            Задание 25:

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

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              2
              3
              4
              5
              6
              7
              8
              
              for n in range(251811, 251826+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)

              ИЛИ:

              1
              2
              3
              4
              
              for n in range(251811, 251826+1):
                divs = [d for d in range(1, n+1) if n % d == 0] 
                if len(divs) == 4:
                  print( *divs )
              С++:

              1
              
               

            Ответ:

            	8123 251813
            50363 251815
            83939 251817
            601 251819
            14813 251821

            Задание 26 (Е. Джобс):

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

            Входные данные. В первой строке входного файла 26-j3.txt находятся два числа: S – размер свободного места на диске (натуральное число, не превышающее 1000000) и N – количество пользователей (натуральное число, не превышающее 10000). В следующих N строках находятся значения объёмов файлов каждого пользователя (все числа натуральные, не превышающие 100), каждое в отдельной строке.
            Запишите в ответе два числа: сначала число сохраненных файлов, затем размер наименьшего сохраненного файла.
            Пример входного файла:

            100 4 
            70
            10
            25
            3

            При таких исходных данных можно сохранить три файла – 70, 25, 3. Поэтому ответ должен содержать два числа – 3 и 3.

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              
              f = open('26-j3.txt')
              data = f.readlines()
              s = data[0].split() 
              s = int(s[0]) #  
              del(data[0]) # удаляем самую первую строку, она уже не нужна
               
              for i in range (0, len(data)): # переводим в целые числа
                  data[i] = int(data[i])
              minSize = 10**9
              count = 0
              data.sort(reverse = True)
              for x in data:
                  if s >= x:
                      s -= x
                      minSize = x # минимальный элемент и будет последним удобвлетворяющим условию
                      count += 1
               
              print( count, minSize )
              С++:

              1
              
               

            Ответ: 1054 732


            Задание 27:

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

            6
            8 3 4
            4 8 12
            9 5 6
            2 8 3
            12 3 5
            1 4 11

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

            ✍ Решение:

              Программирование:

              PascalABC.net:

              1
              
               
              Python:

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
              21
              22
              
              f = open ('27-29a.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])
                  c=int(s[2])
               
                  if a > b: (a,b)=(b,a)
                  if b > c: (b,c)=(c,b)
                  if a > b: (a,b)=(b,a) 
                     # a,b,c отсортированы по возрастанию
                  summa += c+b 
                  if abs(a-b) % 5 > 0: minim = min(abs(a-b),minim)
                  if abs(a-c) % 5 > 0: minim = min(abs(a-c),minim)
              if summa % 5 != 0:
                  print("s=",summa)
              else:
                  print(summa - minim)
              С++:

              1
              
               

            Ответ: 25034 76468978

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