Версия для печати и копирования в MS Word
1
Задания Д25 C2 № 9209
Дан массив, содержащий неотрицательные целые числа. Если сумма всех элементов массива чётная, нужно вывести количество чётных (по значению) элементов массива, если нечётная – количество нечётных.
Например, для массива из 6 элементов, равных соответственно 2, 6, 12, 17, 3, 8, ответом будет 4 – количество чётных элементов, так как общая сумма всех элементов чётна.
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже.
Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
Бейсик | Паскаль |
---|---|
CONST N=2000 DIM A(N) AS INTEGER DIM I, K AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END … END |
const N=2000; var a: array [1..N] of integer; i, k: integer; begin for i:=1 to N do readln(a[i]); … end. |
Алгоритмический язык | Python |
алг нач цел N=2000 | Изменять значение целтаб a[1:N] цел i, k нц для i от 1 до N ввод a[i] кц … кон |
// допускается также использовать // целочисленные переменные i, k a = [] N=2000 //менять значение N нельзя for i in range(0, N): a.append(int(input())) … |
Си++ | |
#include <iostream> using namespace std; #define N 2000 int main(){ int a[N]; int i, k; for (i=0; i < N; i++) cin >> a[i]; … return 0; } |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в приведённых фрагментах.
Загрузка решений доступна для зарегистрировавшихся пользователей
2
Задания Д25 C2 № 9317
Дан массив, содержащий неотрицательные целые числа. Если сумма всех элементов массива чётная, нужно вывести количество нечётных (по значению) элементов массива, если нечётная – количество чётных.
Например, для массива из 6 элементов, равных соответственно 2, 6, 12, 17, 3, 8, ответом будет 2 – количество нечётных элементов, так как общая сумма всех элементов чётна.
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
Бейсик | Паскаль |
---|---|
CONST N=2000 DIM A(N) AS INTEGER DIM I, K AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END … END |
const N=2000; var a: array [1..N] of integer; i, k: integer; begin for i:=1 to N do readln(a[i]); … end. |
Алгоритмический язык | Python |
алг нач цел N=2000 | Изменять значение целтаб a[1:N] цел i, k нц для i от 1 до N ввод a[i] кц … кон |
# допускается также использовать # целочисленные переменные i, k a = [] n=2000 #менять значение n нельзя for i in range(0, n): a.append(int(input())) … |
Си++ | |
#include <iostream> using namespace std; #define N 2000 int main(){ int a[N]; int i, k; for (i=0; i < N; i++) cin >> a[i]; … return 0; } |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в приведённых фрагментах.
Загрузка решений доступна для зарегистрировавшихся пользователей
3
Задания Д25 C2 № 9811
Дан массив, содержащий 2015 неотрицательных целых чисел. Ямой называется не крайний элемент массива, который меньше обоих своих соседей. Необходимо найти в массиве самую глубокую яму, то есть яму, значение которой минимально. Если в массиве нет ни одной ямы, ответ считается равным 0.
Например, в массиве из шести элементов, равных соответственно 4, 9, 2, 17, 3, 8, есть две ямы – 2 и 3, самая глубокая яма – 2.
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
Бейсик | Python |
---|---|
CONST N=2015 DIM A(N) AS INTEGER DIM I, J, K AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
//допускается также использо- // вание целочисленных // переменных j, k a = [] n = 2015 // менять значение n нельзя for i in range(0, n): a.append(int(input())) … |
Паскаль | Алгоритмический язык |
const N=2015; var a: array [1..N] of integer; i, j, k: integer; begin for i:=1 to N do readln(a[i]); … end. |
алг нач цел N=2015| Изменять значение этой переменной нельзя целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц … кон |
Си++ | |
#include <iostream> using namespace std; #define N 2015 int main(){ int a[N]; int i, j, k; for (i=0; i < N; i++) cin >> a[i]; … return 0; } |
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.4) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
Загрузка решений доступна для зарегистрировавшихся пользователей
4
Задания Д25 C2 № 2914
Опишите на русском языке или на одном из языков программирования алгоритм вычисления разности между средним арифметическим максимального и минимального значений элементов заданного целочисленного массива из 30 элементов и средним арифметическим всех элементов этого массива.
Исходные данные объявлены так, как показано ниже.
Бейсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, MIN, MAX, SUM AS INTEGER DIM SRED1,SRED2 AS SINGLE FOR I = 1 TO N INPUT A(I) NEXT I … END |
uses crt; const n=30; type massiv=array[1..n] of integer; var a:massiv; min,max,i,sum:integer; sred1,sred2:real; Begin for i:=1 to n do begin write(‘a[‘,i,’]= ‘);readln(a[i]); end; … end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; #define N 30 int main(void) { int a[N]; int min,max,i,sum; float sred1,sred2; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 30 целтаб a[1:N] цел min,max,i,sum вещ sred1,sred2 нц для i от 1 до N ввод a[i] кц … кон |
Русский (естественный) язык | |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные min,max,i,sum. Объявляем вещественную переменную sred1,sred2. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. … |
|
Python | |
# допускается также # использовать # целочисленные переменные min,max,i,sum # и вещественные переменные sred1,sred2 a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
Загрузка решений доступна для зарегистрировавшихся пользователей
5
Задания Д25 C2 № 2909
Опишите на русском языке или на одном из языков программирования алгоритм подсчета суммы всех отрицательных элементов заданного целочисленного массива размером 30 элементов. Если отрицательных элементов нет, сообщите об этом.
Исходные данные объявлены так, как показано ниже.
Бейсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, S AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, s: integer; begin for i:=1 to N do readln(a[i]); … end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; #define N 30 int main(void) { int a[N]; int i, s; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 30 целтаб a[1:N] цел i, s нц для i от 1 до N ввод a[i] кц … кон |
Русский (естественный) язык | |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные I, S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. … |
|
Python | |
# допускается также # использовать # целочисленную переменную s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
Загрузка решений доступна для зарегистрировавшихся пользователей
6
Задания Д25 C2 № 2901
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое элементов массива, имеющих нечетное значение. Гарантируется, что в исходном массиве хотя бы один элемент имеет нечетное значение.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бейсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, X, Y AS INTEGER DIM S AS SINGLE FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, x, y: integer; s: real; begin for i:=1 to N do readln(a[i]); … end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; #define N 30 int main(void) { int a[N]; int i, x, y; float s; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 30 целтаб a[1:N] цел i, x, y вещ s нц для i от 1 до N ввод a[i] кц … кон |
Русский (естественный) язык | |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные I, X, Y. Объявляем вещественную переменную S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. … |
|
Python | |
# допускается также # использовать две # целочисленные переменные x, y # и вещественную переменную s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
В качестве ответа необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
Загрузка решений доступна для зарегистрировавшихся пользователей
7
Задания Д25 C2 № 2921
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое элементов массива, имеющих нечетное значение. Гарантируется, что в исходном массиве хотя бы один элемент имеет нечетное значение.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бэйсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, X, Y AS INTEGER DIM S AS SINGLE FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, x, y: integer; s: real; begin for i:=1 to N do readln(a[i]); … end. |
Си++ | Естественный язык |
#include <iostream> using namespace std; #define N 30 int main(void) {int a[N]; int i, x, y; float s; for (i=0; i<N; i++) cin >> a[i]; … } |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные I, X, Y. Объявляем вещественную переменную S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. … |
Python | |
# допускается также # использовать две # целочисленные переменные x, y # и вещественную переменную s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учетом синтаксиса и особенностей используемого вами языка программирования.
Загрузка решений доступна для зарегистрировавшихся пользователей
8
Задания Д25 C2 № 2925
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от -1000 до 1000. Опишите на русском или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое тех элементов массива, которые по своему значению меньше последнего элемента этого массива. Гарантируется, что в исходном массиве есть хотя бы один такой элемент. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бейсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, X, Y AS INTEGER DIM S AS SINGLE FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, x, y: integer; s: real; begin for i:=1 to N do readln(a[i]); … end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; #define N 30 int main(void) { int a[N]; int i, x, y; float s; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 30 целтаб a[1:N] цел i, x, y вещ s нц для i от 1 до N ввод a[i] кц … кон |
Русский (естественный) язык | |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные I, X, Y. Объявляем вещественную переменную S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. … |
|
Python | |
# допускается также # использовать две # целочисленные переменные x, y # и вещественную переменную s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать переменные, аналогичные переменным, используемые в алгоритме, записанном на естественном языке, с учетом синтаксиса и особенностей используемого вами языка программирования.
Загрузка решений доступна для зарегистрировавшихся пользователей
9
Задания Д25 C2 № 2912
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое элементов массива, имеющих нечетное значение. Гарантируется, что в исходном массиве хотя бы один элемент имеет нечетное значение.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бейсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, X, Y AS INTEGER DIM S AS SINGLE FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, x, y: integer; s: real; begin for i:=1 to N do readln(a[i]); … end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; #define N 30 int main(void) { int a[N]; int i, x, y; float s; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 30 целтаб a[1:N] цел i, x, y вещ s нц для i от 1 до N ввод a[i] кц … кон |
Русский (естественный) язык | |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные I, X, Y. Объявляем вещественную переменную S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. … |
|
Python | |
# допускается также # использовать две # целочисленные переменные x, y # и вещественную переменную s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок─схемы. В этом случае вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учетом синтаксиса и особенностей используемого вами языка программирования.
Загрузка решений доступна для зарегистрировавшихся пользователей
10
Задания Д25 C2 № 3622
Дан целочисленный массив из 40 элементов. Элементы массива могут принимать произвольные значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит сумму элементов самой длинной возрастающей последовательности подряд идущих элементов массива.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бэйсик | Паскаль |
---|---|
N = 40 DIM A(N) AS INTEGER DIM I, L, LMAX, S, SMAX AS INTEGER FOR I = 1 TO N INPUT A (I) NEXT I … END |
const N = 40; var a: array [1..N] of integer; i, l, lmax, s, smax: integer; begin for i : = 1 to N do readln(a[i]); … end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; #define N 40 int main(void) {int a [N]; int i, l, lmax, s, smax; for (i = 0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 40 целтаб а[1:N] цел i, L, Lmax, S, Smax нц для i от 1 до N ввод a[i] кц … кон |
Естественный язык | |
Объявляем массив А из 40 элементов. Объявляем целочисленные переменные I, L, Lmax, S, Smax. В цикле от 1 до 40 вводим элементы массива А с 1-го по 40-й. … |
|
Python | |
# допускается также # использовать четыре # целочисленные переменные l, lmax, s, smax a = [] n = 40 for i in range(0, n): a.append(int(input())) … |
В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка програм-мирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
Загрузка решений доступна для зарегистрировавшихся пользователей
11
Задания Д25 C2 № 3638
Опишите на русском языке или одном из языков программирования алгоритм подсчета среднего значения отрицательных элементов в целочисленном массиве из 30 элементов в предположении, что в нем есть хотя бы один отрицательный элемент.
Загрузка решений доступна для зарегистрировавшихся пользователей
12
Задания Д25 C2 № 3790
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое элементов массива, имеющих нечетное значение. Гарантируется, что в исходном массиве хотя бы один элемент имеет нечетное значение.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бейсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, X, Y AS INTEGER DIM S AS SINGLE FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, x, y: integer; s: real; begin for i:=1 to N do readln(a[i]); … end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; #define N 30 int main(void) { int a[N]; int i, x, y; float s; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 30 целтаб a[1:N] цел i, x, y вещ s нц для i от 1 до N ввод a[i] кц … кон |
Русский (естественный) язык | |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные I, X, Y. Объявляем вещественную переменную S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. … |
|
Python | |
# допускается также # использовать две # целочисленные переменные x, y # и вещественную переменную s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
В качестве ответа необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
Загрузка решений доступна для зарегистрировавшихся пользователей
13
Задания Д25 C2 № 5289
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Элемент массива называется хорошим, если это двузначное число, причём цифра в разряде десятков больше, чем цифра в разряде единиц. Опишите на одном из языков программирования алгоритм, позволяющий найти и вывести сумму всех хороших элементов массива.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бэйсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, J, S AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, j, s: integer; begin for i:=l to N do readln(a[i]); … end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; #define N 30 int main(){ int a[N]; int i, j, s; for (i=0; i < N; i++) cin >> a[i]; … |
алг нач цел N=30 целтаб а[1:N] цел i, j, s нц для i от 1 до N ввод а[i] кц … кон |
Python | |
# допускается также # использовать две # целочисленные переменные j, s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.4) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Загрузка решений доступна для зарегистрировавшихся пользователей
14
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от −20 до 20 — сведения о температуре за каждый день ноября. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднюю температуру среди дней, когда были заморозки (температура опускалась ниже 0 °C). Гарантируется, что хотя бы в один день ноября была отрицательная температура.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бейсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, X, Y AS INTEGER DIM S AS SINGLE FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, x, y: integer; s: real; begin for i:=1 to N do read (a[i]); … end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; #define N 30 int main(void) {int a[N]; int i, x, y; float s; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 30 целтаб a[1:N] цел i, x, y вещ s нц для i от 1 до N ввод a[i] кц … кон |
Естественный язык | |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные I, X, Y. Объявляем вещественную переменную S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. |
|
Python | |
# допускается также # использовать две # целочисленные переменные x, y # и вещественную переменную s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке
программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае Вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учётом синтаксиса и особенностей используемого Вами языка программирования.
Загрузка решений доступна для зарегистрировавшихся пользователей
15
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 1 до 5 и содержат годовые оценки по информатике учащихся выпускного класса. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести средний балл среди «хорошистов» и «отличников» (тех, кто получил итоговую отметку «4» или «5»). Гарантируется, что в классе есть хотя бы один «хорошист» или «отличник». Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бейсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, X, Y AS INTEGER DIM S AS SINGLE FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, x, y: integer; s: real; begin for i:=1 to N do read (a[i]); … end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; #define N 30 int main(void) {int a[N]; int i, x, y; float s; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 30 целтаб a[1:N] цел i, x, y вещ s нц для i от 1 до N ввод a[i] кц … кон |
Естественный язык | |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные I, X, Y. Объявляем вещественную переменную S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. |
|
Python | |
# допускается также # использовать две # целочисленные переменные x, y # и вещественную переменную s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке
программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае Вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учётом синтаксиса и особенностей используемого Вами языка программирования.
Загрузка решений доступна для зарегистрировавшихся пользователей
16
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 150 до 200 — рост учащихся выпускного класса. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести средний рост среди учащихся класса, входящих в школьную баскетбольную команду (в команду входят все учащиеся, чей рост больше 180 сантиметров). Гарантируется, что в классе учится хотя бы один член баскетбольной команды. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бейсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, X, Y AS INTEGER DIM S AS SINGLE FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, x, y: integer; s: real; begin for i:=1 to N do read (a[i]); … end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; #define N 30 int main(void) {int a[N]; int i, x, y; float s; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 30 целтаб a[1:N] цел i, x, y вещ s нц для i от 1 до N ввод a[i] кц … кон |
Естественный язык | |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные I, X, Y. Объявляем вещественную переменную S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. |
|
Python | |
# допускается также # использовать две # целочисленные переменные x, y # и вещественную переменную s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке
программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае Вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учётом синтаксиса и особенностей используемого Вами языка программирования.
Загрузка решений доступна для зарегистрировавшихся пользователей
17
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 100 и содержат итоговые баллы участников олимпиады по информатике. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести средний балл среди участников, ставших призёрами олимпиады (призёрами олимпиады стали школьники, набравшие более 50 баллов). Гарантируется, что хотя бы один участник олимпиады стал её призёром. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бейсик | Паскаль |
---|---|
N=30 DIM A(N) AS INTEGER DIM I, X, Y AS INTEGER DIM S AS SINGLE FOR I = 1 TO N INPUT A(I) NEXT I … END |
const N=30; var a: array [1..N] of integer; i, x, y: integer; s: real; begin for i:=1 to N do read (a[i]); … end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; #define N 30 int main(void) {int a[N]; int i, x, y; float s; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N = 30 целтаб a[1:N] цел i, x, y вещ s нц для i от 1 до N ввод a[i] кц … кон |
Естественный язык | |
Объявляем массив A из 30 элементов. Объявляем целочисленные переменные I, X, Y. Объявляем вещественную переменную S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. |
|
Python | |
# допускается также # использовать две # целочисленные переменные x, y # и вещественную переменную s a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке
программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае Вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учётом синтаксиса и особенностей используемого Вами языка программирования.
Загрузка решений доступна для зарегистрировавшихся пользователей
18
Задания Д25 C2 № 6200
Дан массив, содержащий 2014 неотрицательных целых чисел, не превышающих 10 000. Опишите на одном из языков программирования алгоритм, позволяющий найти и вывести сумму всех содержащихся в массиве трёхзначных чисел, десятичная запись которых оканчивается на 9, но не на 99. Если подходящих чисел в массиве нет, программа должна вывести число –1. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
Паскаль | Бейсик |
---|---|
const N=2014; var a : array [1..N] of integer; i, j, s: integer; begin for i:=1 to N do readln(a[i]); … end. |
N=2014 DIM A(N) AS INTEGER DIM I, J, S AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
Си++ | Алгоритмический |
#include <iostream> using namespace std; #define N 2014 int main() { int a[N]; int i, j, s; for (i=0; i < N; i++) cin >> a[i]; … } |
алг нач цел N=2014 целтаб a[1:N] цел i, j, s нц для i от 1 до N ввод a[i] кц … кон |
Python | |
# допускается также # использовать две # целочисленные переменные j, s a = [] n = 2014 for i in range(0, n): a.append(int(input())) … |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.4) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Загрузка решений доступна для зарегистрировавшихся пользователей
19
Задания Д25 C2 № 10301
Дан массив, содержащий 2016 неотрицательных целых чисел. Необходимо найти в этом массиве количество таких элементов, которые равны среднему арифметическому двух элементов, расположенных сразу после него. Например, в массиве из 6 элементов, равных соответственно 2, 3, 1, 5, 6, 4, есть три таких элемента, они расположены на первом, втором и четвёртом месте и равны 2, 3 и 5.
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.
Бейсик | Python |
---|---|
CONST N=2016 DIM A(N) AS INTEGER DIM I, K AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
# допускается также использо- # вание целочисленной # переменной k a = [] N = 2016 for i in range(0, N): a.append(int(input())) … |
Паскаль | Алгоритмический язык |
const N=2016; var a: array [1..N] of integer; i, k: integer; begin for i:=1 to N do readln(a[i]); … end. |
алг нач цел N=2016 целтаб a[1:N] цел i, k нц для i от 1 до N ввод a[i] кц … кон |
Си++ | |
#include <iostream> using namespace std; #define N 2016 int main(){ int a[N]; int i, k; for (i=0; i < N; i++) cin >> a[i]; … return 0; } |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Загрузка решений доступна для зарегистрировавшихся пользователей
20
Задания Д25 C2 № 10328
Дан массив, содержащий 2016 неотрицательных целых чисел. Необходимо найти в этом массиве количество таких элементов, которые равны среднему арифметическому двух элементов, расположенных непосредственно перед ним. Например, в массиве из 6 элементов, равных соответственно 4, 6, 5, 1, 3, 2, есть три таких элемента, они расположены на третьем, пятом и шестом месте и равны 5, 3 и 2.
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.
Бейсик | Python |
---|---|
CONST N=2016 DIM A(N) AS INTEGER DIM I, K AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
# допускается также использо- # вание целочисленной # переменной k a = [] N = 2016 for i in range(0, N): a.append(int(input())) … |
Паскаль | Алгоритмический язык |
const N=2016; var a: array [1..N] of integer; i, k: integer; begin for i:=1 to N do readln(a[i]); … end. |
алг нач цел N=2016 целтаб a[1:N] цел i, k нц для i от 1 до N ввод a[i] кц … кон |
Си | |
#include <iostream> using namespace std; #define N 2016 int main(){ int a[N]; int i, k; for (i=0; i cin >> a[i]; … return 0; } |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Загрузка решений доступна для зарегистрировавшихся пользователей
21
Задания Д25 C2 № 10399
Дан массив, содержащий 2016 целых чисел. Необходимо найти и вывести сумму тех элементов этого массива, чётность которых совпадает с чётностью максимального элемента.
Например, в массиве из 6 элементов, равных соответственно 2, 3, 1, 5, 6, 4, максимальный элемент чётный (6), значит, ответом будет сумма чётных элементов этого массива 2 + 6 + 4 = 12.
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.
Бейсик | Python |
---|---|
CONST N=2016 DIM A(N) AS INTEGER DIM I, M, S, P AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
# допускается также использо- # вание целочисленной # переменной m, s, p a = [] N = 2016 for i in range(0, N): a.append(int(input())) … |
Паскаль | Алгоритмический язык |
const N=2016; var a: array [1..N] of integer; i, m, s, p: integer; begin for i:=1 to N do readln(a[i]); … end. |
алг нач цел N=2016 целтаб a[1:N] цел i, m, s, p нц для i от 1 до N ввод a[i] кц … кон |
Си++ | |
#include <iostream> using namespace std; #define N 2016 int main(){ int a[N]; int i, m, s, p; for (i=0; i < N; i++) cin >> a[i]; … return 0; } |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Загрузка решений доступна для зарегистрировавшихся пользователей
22
Задания Д25 C2 № 10426
Дан массив, содержащий 2016 целых чисел. Необходимо найти и вывести сумму тех элементов этого массива, чётность которых не совпадает с чётностью минимального элемента.
Например, в массиве из 6 элементов, равных соответственно 2, 3, 1, 5, 6, 4, минимальный элемент нечётный (1), значит, ответом будет сумма чётных элементов этого массива 2 + 6 + 4 = 12.
Если элементов нужной чётности в массиве нет, сумма считается равной нулю. Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.
Бейсик | Python |
---|---|
CONST N=2016 DIM A(N) AS INTEGER DIM I, M, S, P AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
# допускается также использо- # вание целочисленной # переменной m, s, p a = [] N = 2016 for i in range(0, N): a.append(int(input())) … |
Паскаль | Алгоритмический язык |
const N=2016; var a: array [1..N] of integer; i, m, s, p: integer; begin for i:=1 to N do readln(a[i]); … end. |
алг нач цел N=2016 целтаб a[1:N] цел i, m, s, p нц для i от 1 до N ввод a[i] кц … кон |
Си++ | |
#include <iostream> using namespace std; #define N 2016 int main(){ int a[N]; int i, m, s, p; for (i=0; i < N; i++) cin >> a[i]; … return 0; } |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Загрузка решений доступна для зарегистрировавшихся пользователей
23
Задания Д25 C2 № 13636
Дан массив, содержащий 2017 положительных целых чисел, не превышающих 10000. Необходимо найти и вывести сумму таких элементов этого массива, шестнадцатеричная запись которых содержит ровно три знака, причём последний из них – буква от A до F. Например, для массива из 4 элементов, содержащего числа 522, 4095, 296, 205, ответ будет равен 4617: в шестнадцатеричной системе эти числа записываются как 20A, FFF, 128, CD; первые два подходят, в третьем – последняя цифра не записывается буквой, в четвёртом – меньше трёх знаков. Если таких чисел в массиве нет, сумма считается равной 0. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
Бейсик | Python |
---|---|
CONST N=2017 DIM A(N) AS INTEGER DIM I, M, K AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
# допускается также использо- # вание целочисленных # переменных m, k a = [] N = 2017 for i in range(0, N): a.append(int(input())) … |
Паскаль | Алгоритмический язык |
const N=2017; var a: array [1..N] of integer; i, m, k: integer; begin for i:=1 to N do readln(a[i]); … end. |
алг нач цел N=2017 целтаб a[1:N] цел i, m, k нц для i от 1 до N ввод a[i] кц … кон |
Си++ | |
#include <iostream> using namespace std; #define N 2017 int main(){ int a[N]; int i, m, k; for (i=0; i<N; i++) cin >> a[i]; … return 0; } |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и версию языка программирования). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Загрузка решений доступна для зарегистрировавшихся пользователей
24
Дан массив, содержащий 2018 положительных целых чисел, не превышающих 30 000. Необходимо определить, сколько в этом массиве элементов, десятичная и восьмеричная запись которых содержит одинаковое количество цифр.
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
Бейсик | Python |
---|---|
CONST N=2018 DIM A(N) AS INTEGER DIM B, I, K, L, M AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
# кроме уже указанных # допускается использование # целочисленных переменных # k, b, l, m a = [] N = 2018 for i in range(0, N): a.append(int(input())) … |
Паскаль | Алгоритмический язык |
const N=2018; var a: array [1..N] of integer; b, i, k, l, m: integer; begin for i:=1 to N do readln(a[i]); … end. |
алг нач цел N=2018 целтаб a[1:N] цел b, i, k, l, m нц для i от 1 до N ввод a[i] кц … кон |
Си++ | |
#include <iostream> using namespace std; const int N=2018; int main(){ int a[N]; int b, i, k, l, m; for (i=0; i cin >> a[i]; … return 0; } |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Загрузка решений доступна для зарегистрировавшихся пользователей
25
Задания Д25 C2 № 14786
Дан массив, содержащий 2018 положительных целых чисел, не превышающих 30 000. Необходимо определить, сколько в этом массиве элементов, десятичная и шестнадцатеричная запись которых содержит одинаковое количество цифр.
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже.
Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
Бейсик | Python |
---|---|
CONST N=2018 DIM A(N) AS INTEGER DIM B, I, K, L, M AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END |
# кроме уже указанных # допускается использование # целочисленных переменных # k, b, l, m a = [] N = 2018 for i in range(0, N): a.append(int(input())) … |
Паскаль | Алгоритмический язык |
const N=2018; var a: array [1..N] of integer; b, i, k, l, m: integer; begin for i:=1 to N do readln(a[i]); … end. |
алг нач цел N=2018 целтаб a[1:N] цел b, i, k, l, m нц для i от 1 до N ввод a[i] кц … кон |
Си++ | |
#include <iostream> using namespace std; const int N=2018; int main(){ int a[N]; int b, i, k, l, m; for (i=0; i < N; ++i) cin >> a[i]; … return 0; } |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Загрузка решений доступна для зарегистрировавшихся пользователей
26
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит сумму элементов массива, меньших 200 и при этом кратных 5, а затем заменяет каждый такой элемент на число, равное найденной сумме. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строчки. Например, для исходного массива из шести элементов:
204
115
27
20
305
4
программа должна вывести следующий массив:
204
135
27
135
305
4
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Бейсик | Python |
---|---|
CONST N AS INTEGER = 30 DIM A (1 TO N) AS LONG DIM I, J, K AS LONG FOR I = 1 TO N INPUT A(I) NEXT I … END |
# допускается также # использовать две # целочисленные # переменные j, k a = [] n = 30 for i in range(0, n): a.append(int(input())) … |
Паскаль | Алгоритмический язык |
const n = 30; var a: array [1..n] of longint; i, j, k: longint; begin for i := 1 to n do readln(a[i]); … end. |
алг нач цел N = 30 целтаб а[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц … кон |
Си++ | |
#include <iostream> using namespace std; const int n = 30; int main() { int a[n]; int i, j, k; for (i = 0; i < n; i++) std::cin >> a[i]; … return 0; } |
качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).
Загрузка решений доступна для зарегистрировавшихся пользователей
Завершить тестирование, свериться с ответами, увидеть решения.
На уроке рассмотрено решение 25 задания ЕГЭ по информатике: дается подробное объяснение и разбор заданий демонстрационных вариантов и досрочных экзаменов
Содержание:
- Объяснение задания 25 ЕГЭ по информатике
- Алгоритмизация и программирование
- Решение 25 заданий ЕГЭ по информатике
- Делители числа
- Простые числа
- Задания прошлых лет для тренировки (до 2021)
- Задачи с поэлементной обработкой массива
- Задачи на обработку элементов массива с последующей заменой
- Задачи на обработку пар элементов массива (два подряд идущих)
- Задачи на обработку трёх подряд идущих элементов массива (тройки элементов массива)
- Задачи на поиск максимума, минимума элементов массива и другие
- Решение 25 заданий ЕГЭ по информатике: более сложные задания
25-е задание: «Программная обработка целочисленной информации»
Уровень сложности
— высокий,
Требуется использование специализированного программного обеспечения
— да,
Максимальный балл
— 2,
Примерное время выполнения
— 20 минут.
Проверяемые элементы содержания: Умение создавать собственные программы (10–20 строк) для обработки целочисленной информации
Рекомендации по выполнению:
«В этом задании требуется написать фрагмент программы, реализующий простую обработку целочисленного массива. У экзаменуемых, хорошо освоивших технику программирования, это задание обычно не вызывает серьёзных затруднений, поскольку алгоритм обработки массива не относится к сложным»
Типичные ошибки и рекомендации по их предотвращению:
«Часто бывает, что увлекшись написанием решения, экзаменуемый совершает ошибки в простых ситуациях: организация ввода-вывода, описание и инициализация переменных, обработка массива (выход за границу) и т.д. Эти ошибки могут стоить Вам нескольких баллов, старайтесь их не допускать»
ФГБНУ «Федеральный институт педагогических измерений»
Алгоритмизация и программирование
Для решения задания требуется вспомнить темы:
- Одномерные массивы.
- Двумерные массивы.
Решение 25 заданий ЕГЭ по информатике
Плейлист видеоразборов задания на YouTube:
Задание демонстрационного варианта 2022 года ФИПИ
Делители числа
25_7:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [126849; 126871], числа, имеющие ровно 4 различных делителя.
Выведите эти четыре делителя для каждого найденного числа в порядке возрастания.
✍ Решение:
-
✎ Решение (неоптимизированный вариант, метод полного перебора):
- Будем использовать оптимизированный вариант программы, подходящий для «медленных» компьютеров. Для этого перебор делителей для числа
n
будем выполнять от2
до√n
, округлив его до ближайшего целого числа (не включая точный квадратный корень, если он существует):
PascalABC.net:
|
||
Python:
|
||
С++: |
✎ Решение (оптимизированный вариант):
вместо диапазона делителей [1; число] использовать диапазон [1; округл(√n)]
n
), то в список делителей добавлять будем только сам делитель, если нет – то добавляем пару делителей (делитель
и n // делитель
):Пример: число 8 = 2 * 4 Достаточно рассмотреть цикл от 2 до округл(√8) (=2) если 8 делится на 2 и 8/2 не равно 2, то делители: 2 и 4 (8/2)
PascalABC.net:
|
||
Python:
|
||
С++: |
✎ Решение: Генерация списка делителей.
Общая идея:
PascalABC.net: |
Python:
for n in range(126849, 126871+1): divs = [d for d in range(1, n+1) if n % d == 0] if len(divs) == 4: print( *divs ) |
С++: |
Ответ:
1 3 42283 126849 1 47 2699 126853 1 5 25373 126865 1 293 433 126869
25_8:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [164700; 164752], числа, имеющие ровно 6 различных делителей.
Выведите эти делители для каждого найденного числа в порядке возрастания.
✍ Решение:
-
✎ Решение (оптимизированный вариант):
- Для каждого числа указанного диапазона генерируем список делителей.
- Если длина списка равна четырем, выводим его.
PascalABC.net:
|
||
Python:
|
||
С++: |
✎ Решение: Генерация списка делителей.
Общая идея:
PascalABC.net: |
Python:
for n in range(164700, 164752+1): divs = [d for d in range(1, n+1) if n % d == 0] if len(divs) == 6: print( *divs ) |
С++: |
Ответ:
1 2 4 41177 82354 164708 1 3 9 18301 54903 164709 1 2 4 41179 82358 164716 1 2 4 41183 82366 164732
25_9:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190201; 190230], числа, имеющие ровно 4 различных делителя.
Выведите эти четыре делителя для каждого найденного числа в порядке убывания.
✍ Решение:
-
✎ Решение (неоптимизированный вариант, метод полного перебора):
- Для каждого числа указанного диапазона генерируем список делителей.
- Если длина списка равна четырем, выводим его.
PascalABC.net:
|
||
Python:
|
||
С++: |
✎ Решение (оптимизированный вариант):
PascalABC.net:
|
||
Python:
|
||
С++: |
✎ Решение: Генерация списка делителей.
Общая идея:
PascalABC.net: |
Python:
for n in range(190201, 190230+1): divs = [d for d in range(1, n+1) if n % d == 0] if len(divs) == 4: divs.reverse() # реверсируем (по убыванию) print( *divs ) |
С++: |
Ответ:
190201 17291 11 1 190202 95101 2 1 190214 95107 2 1 190219 853 223 1 190222 95111 2 1 190223 17293 11 1 190227 63409 3 1 190229 14633 13 1
Видеоразбор задания:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
25_10:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190201; 190280], числа, имеющие ровно 4 различных ЧЁТНЫХ делителя.
Выведите эти четыре делителя для каждого найденного числа в порядке убывания.
✍ Решение:
-
✎ Решение (неоптимизированный вариант, метод полного перебора):
- Для каждого числа указанного диапазона генерируем список делителей.
- Если длина списка равна четырем, выводим его.
PascalABC.net:
|
||
Python:
|
||
С++: |
✎ Решение: Генерация списка делителей.
Общая идея:
PascalABC.net: |
Python:
for n in range(190201, 190280+1): divs = [d for d in range(1, n+1) if n % d == 0 and d % 2 == 0] if len(divs) == 4: divs.reverse() print( *divs ) |
С++: |
Ответ:
190226 838 454 2 190234 17294 22 2 190238 2606 146 2 190252 95126 4 2 190258 758 502 2 190274 27182 14 2 190276 95138 4 2
25_11:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [394441; 394505], числа, имеющие максимальное количество различных делителей. Если таких чисел несколько, то найдите минимальное из них.
Выведите количество делителей найденного числа и два наибольших делителя в порядке убывания.
✍ Решение:
-
✎ Решение (неоптимизированный вариант, метод полного перебора):
PascalABC.net:
|
||
Python:
|
||
С++: |
✎ Решение (Генерация списка делителей):
PascalABC.net: | ||
Python:
|
||
С++: |
Ответ: 48 394450 197225
Видео
Простые числа
25_12:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [3532000; 3532160], простые числа.
Выведите все найденные простые числа в порядке убывания, слева от каждого числа выведите его номер по порядку.
✍ Решение:
-
✎ Решение (неоптимизированный вариант, метод полного перебора):
PascalABC.net:
|
||
Python:
|
||
С++: |
✎ Решение (оптимизированный вариант):
PascalABC.net:
|
||
Python:
|
||
С++: |
Ответ:
1 3532147 2 3532121 3 3532103 4 3532091 5 3532049 6 3532033 7 3532021 8 3532019 9 3532007
Задания прошлых лет для тренировки (до 2021)
Задачи с поэлементной обработкой массива
25_1: ЕГЭ по информатике 2017 года (один из вариантов со слов выпускника):
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество элементов массива НЕ кратных 3.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.
1 2 3 4 5 6 7 8 |
const N = 20; var i,j,k:integer; a:array [1..N] of integer; begin for i:=1 to N do readln(a[i]); … end. |
✍ Решение:
Рассмотрим заданный фрагмент решения:
- в цикле со счетчиком i запрашиваются значения элементов массива, т.е. формируется массив;
- из постановки задания видим, что необходимо найти количество чего-то, это значит, что нужно использовать переменную счетчик;
- объявлены три целочисленных переменных: i, j, k; переменная i использована в первом цикле, значит для счетчика можно взять переменную k;
- счетчик всегда нужно обнулять, поэтому следующим оператором будет:
- определим, количество чего нам необходимо считать: количество элементов массива не кратных 3. Кратность можно определить через остаток от деления: если значение элемента массива при делении на 3 в остатке не возвращает 0, значит элемент не кратен трем;
- остаток при делении в паскале — оператор mod. Поскольку необходимо просмотреть каждый элемент массива, то это нужно делать в цикле for;
- переменная i уже использована в первом цикле for, значит, для очередного цикла возьмем неиспользованную переменную j:
- если условие истинно (т.е. нашелся элемент массива, не кратный трем), то увеличиваем счетчик:
- после цикла остается вывести значение счетчика, т.е. вывести количество элементов массива не кратных 3:
for j:=1 to N do if a[j] mod 3 <> 0 then
Результат:
k:=0; for j:=1 to N do if a[j] mod 3 <> 0 then inc(k); writeln(k);
Смотрите видео с подробным объяснением и разбором данного 25 задания:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
Задачи на обработку элементов массива с последующей заменой
25_3: Решение 25 задания ЕГЭ по информатике Демоверсия 2018:
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10000 включительно. Опишите на одном из языков программирования алгоритм, который находит количество элементов массива, больших 100 и при этом кратных 5, а затем заменяет каждый такой элемент на число, равное найденному количеству. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести измененный массив, каждый элемент массива выводится с новой строчки.
Например, для массива из шести элементов: 4 115 7 195 25 106
программа должна вывести числа 4 2 7 2 25 106
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
const N = 30; var a: array [1..N] of longint; i, j, k: longint; begin for i := 1 to N do readln(a[i]); ... end. |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Похожие задания для тренировки
✍ Решение:
-
Решение на языке Паскаль:
1 2 3 4 5 6 7 8 9 |
k := 0; for i := 1 to N do if (a[i] > 100) and (a[i] mod 5 = 0) then k:=k+1; for i := 1 to N do begin if (a[i] > 100) and (a[i] mod 5 = 0) then a[i] := k; writeln(a[i]) end |
25_6:
Дан массив, содержащий неотрицательные целые числа. Необходимо вывести:
Например, для массива из шести элементов: 4 6 12 17 3 8
ответом будет 12 — наибольшее чётное число, поскольку чётных чисел в этом массиве больше
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Python:
1 2 3 4 5 6 |
# допускается также использовать # целочисленные переменные j, k, m a = [] n = 2000 // менять значение n нельзя for i in range(0, n): a.append(int(input())) |
✍ Решение:
-
Решение на языке Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
a = [] n = 2000 // менять значение n нельзя for i in range(0, n): a.append(int(input())) j = 0 k = 0 m = 0 for i in range(0, n): if a[i]%2 == 0: j+=1 else: k+=1 if k>j: j = 0 for i in range(0, n): if a[i]>j and a[i] % 2 != 0: j = a[i] print(j) else: for i in range(0, n): if a[i]>m and a[i] % 2 == 0: m = a[i] print(m) |
Задачи на обработку пар элементов массива (два подряд идущих)
25_4:
Дан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых одно из чисел двузначное. В данной задаче под парой подразумевается два подряд идущих элемента массива.
Например, для массива из семи элементов: 13; 323; 12; 33; 117 — ответ: 4.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
1 2 3 4 5 6 7 8 9 10 |
const N = 40; var a: array [1..N] of integer; i, j, k: integer; begin for i := 1 to N do readln(a[i]); ... end. |
✍ Решение:
1 2 3 4 5 |
k := 0; for i := 1 to N - 1 do if ((a[i] < 100) and (a[i] > 9)) or ((a[i + l] < 100) and (a[i + 1] > 9)) then inc(k); writeln(k); |
25_5:
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от -10 000 до 10 000 включительно. Опишите алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых сумма элементов делится на 2, но не делится на 4. В данной задаче под парой подразумевается два подряд идущих элемента массива.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Python:
1 2 3 4 5 6 7 |
# допускается также использовать # две целочисленные переменные # j и k a = [] n = 20 for i in range(0, n): a.append(int(input())) |
✍ Решение:
-
Проанализируем данный фрагмент кода на языке Python:
- В первой строчке кода объявляется список а. Дальше, идет объявление переменной n = 20, она отвечает за размер массива.
- Ниже мы видим инициализацию списка а. Мы должны дописать код дальнейшей программы, который последует после заполнения списка пользователем.
- Итак, по условию мы должны находить пары элементов, сумма которых делится на 2, но не делится на 4, причем парами считаются соседние элементы, например:
a[0]
иa[1]
,a[1]
иa[2]
. - Мы можем узнать, делится ли данный элемент на число, если остаток от деления на него равен 0, и не делится — в противном случае. Тогда сумма соседних элементов при делении на 2 должна давать остаток 0, а при делении на 4 наоборот — отличный от 0.
- Введем цикл, который будет перебирать все элементы массива, считать сумму соседей и проверять истинность условия.
- Когда мы определились с условием, за счетчик возьмем переменную
k
, которую допустимо брать исходя из комментариев к программе. - Мы добавили допустимую переменную
j
, чтобы условный оператор выглядел компактнее. - Однако задача еще не решена. Во-первых, мы должны до цикла инициализировать счетчик
k = 0
. Так как иначе Python выдаст ошибку. - Кроме того, добавим вывод результата после цикла.
- Таким образом, правильный вариант с учетом доработок:
При решении такого рода задач, необходимо помнить, что массив в Python — это список и это динамический тип данных. Кроме того, нумерация элементов массива начинается с 0.
for i in range(0, n-1): j = a[i] + a[i+1] if j%2 == 0 and j%4 != 0:
Так как мы рассматриваем элемент a[i + 1]
, значит, цикл должен работать до n — 1, чтобы не выйти за границы диапазона массива.
... if j%2 == 0 and j%4 != 0: k+=1
Дело в том, что мы пытаемся присвоить переменной k
его же значение, но на 1 больше, но интерпретатор «не встречал» раньше переменной k
, из-за чего возникает ошибка.
a = [] n = 20 for i in range(0, n): a.append(int(input())) k = 0 for i in range(0, n - 1): j = a[i] + a[i + 1] if j%2 == 0 and j%4 != 0: k += 1 print(k)
Задачи на обработку трёх подряд идущих элементов массива (тройки элементов массива)
25_2:
Дан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество троек элементов массива, состоящих из равных между собой чисел. В данной задаче под тройкой подразумевается три подряд идущих элемента массива.
Например, для массива из семи элементов: 2; 2; 2; 4; 4; 4; 4 — ответ: 3.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
1 2 3 4 5 6 7 8 9 10 |
const N=40; var a: array[1..N] of integer; i, j, k:integer; begin for i:=1 to N do readln(a[i]); ... end. |
✍ Решение:
- из постановки задания видим, что необходимо искать количество чего-то, это значит, что нужно использовать переменную счетчик; возьмем для нее объявленную переменную k;
- счетчик всегда нужно сначала обнулять, поэтому следующим оператором будет:
- определим, количество чего нам необходимо считать: количество троек элементов массива, состоящих из равных между собой чисел. Т.е. необходимо сравнивать между собой каждые три подряд идущих элемента массива, например так:
- inc(k) — оператор, увеличивающий счетчик k на единицу;
- условие необходимо выполнять в цикле, так как нужно проверить все элементы массива; цикл со счетчиком необходимо организовать от 1 до N-2, в противном случае индексы элементов a[i+2] выйдут за границы диапазона массива (например, при i = 40, получим … a[40+2], а 42-го элемента массива не существует, поэтому цикл надо делать до i = 38, т.е. N-2).
if (a[i]=a[i+1]) and (a[i]=a[i+2]) then inc(k);
Результат:
for i:=1 to N-2 do if (a[i]=a[i+1]) and (a[i]=a[i+2]) then inc(k); writeln(k);
Более подробное объяснение предлагаем посмотреть на видео:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
Задачи на поиск максимума, минимума элементов массива и другие
Сегодня будем тренироваться решать 19 задание из ЕГЭ по информатике.
В девятнадцатом задании ЕГЭ по информатике обычно даются задачи, в которых есть программный код на пяти языках программирования, и нужно показать умение работать с массивами.
Но зачем вообще нужны массивы в программировании ? Давайте об этом немного поговорим!
Зачем нужны массивы ?
Все примеры буду рассматривать на языке программирования Паскаль, который популярен на уроках информатики.
Пусть у нас есть пять переменных, и их первоначальные значения нужно увеличить в два раза. Тогда без массива код будет выглядеть следующим образом:
var x, y, z, m, n: integer; begin // Первоначальные значения x := 2; y := 3; z := 1; m := 6; n := 8; //Удваиваем значения x := 2 * x; y := 2 * y; z := 2 * z; m := 2 * m; n := 2 * n;
Видим, что приходится каждую переменную умножать отдельно.
Теперь тоже самое сделаем с помощью массива.
const n = 5; {Заводим константу, это будет длина массива} var i :integer; {Заводим переменную для ЦИКЛА} A:array[1..n] of integer; {Заводим массив} begin // Первоначальные значения A[1] := 2; A[2] := 3; A[3] := 1; A[4] := 6; A[5] := 8; //Удваиваем значения for i:=1 to n do A[i] := 2 * A[i];
Обратите внимание, что удвоение во втором случае идёт с помощью двух строчек, когда в первом случае, удвоение получается с помощью пяти строчек. Если бы переменных было 1000, то выигрыш в объёме кода, был бы ещё большим.
Схематично наш массив можно представить так:
Это те же 5 переменных, но они объединены общем именем A. К каждому элементу массива можно обратится по индексу A[1], A[2] и т.д.
Здесь мы задали нумерацию элементов массива от 1 до 5. В паскале можно задать нумерацию элементов массива и от нуля. Например A:array[0..24] of integer;
Удобство использования массива заключается в том, что его элементы можно перебирать и обрабатывать с помощью ЦИКЛОВ! Значит, обычно массив и цикл работают в связке.
Не терпится уже разобрать первый пример из предположительных задач ЕГЭ по информатике.
Примеры решения задач 19 задания из ЕГЭ по информатике
Задача (стандартная)
В программе используются целочисленный массив A с индексами от 0 до 9. Значения элементов массива равны 4; 5; 4; 7; 6; 3; 9; 11; 7; 8 соответственно, т.е. A[0] = 4; A[1] = 5 и т.д.
Определите значение переменной k после выполнения следующего фрагмента программы, записанной ниже на разных языках программирования.
Бейсик | Python |
---|---|
k=0 FOR i=0 TO 8 IF A(i) > A(i+1) THEN k = k + 1 t = A(i) A(i) = A(i+1) A(i+1) = t END IF NEXT i |
k = 0 for i in range(9): if A[i] > A[i+1]: k = k + 1 t = A[i] A[i] = A[i+1] A[i+1] = t |
Паскаль | Алгоритмический язык |
k := 0; for i := 0 to 8 do if A[i] > A[i+1] then begin k := k + 1; t := A[i]; A[i] := A[i + 1]; A[i + 1] := t end; |
k := 0 нц для i от 0 до 8 если A[i] > A[i + 1] то k := k + 1 t := A[i] A[i] := A[i + 1] A[i+1] := t все кц |
Си++ | |
k = 0; for (i = 0; i <= 8; i++) if (A[i] > A[i + 1]) { k = k + 1 t = A[i]; A[i] = A[i + 1]; A[i + 1] = t; } |
Решение:
Рассмотрим программу на языке Паскаль.
В начале переменная k = 0.
Затем начинается ЦИКЛ. Цикл будет выполнятся, пока переменная i «бежит» от 0 до 8.
При первом проходе ЦИКЛА i = 0, при втором i = 1 и т.д.
Внутри цикла проверяется условие (A[i] > A[i+1]). Если условие ВЕРНО, то программа прибавляет к переменной k единицу, и плюс, меняет значения ячеек массива A[i] и A[i+1] с помощью дополнительной переменной t.
Про замену значений двух переменных у меня на сайте написана целая статья!
Чтобы понять, чему равна переменная k после окончания программы, нужно понять, сколько раз будет верно условие внутри цикла.
Сам массив нам дан! (4; 5; 4; 7; 6; 3; 9; 11; 7; 8).
На рисунке показана каждая итерация ЦИКЛА при всех значениях переменной i. Зелёной галочкой отмечены те итерации, где сработает условие, и, значит, переменная k будет увеличена на 1.
Важно: После первого срабатывания условия, программа меняет значения элементов A[1] и A[2]. И наш массив принимает следующий вид: 4; 4; 5; 7; 6; 3; 9; 11; 7; 8. И при следующем проходе A[2] снова принимает значение «5», а не «4»! И так во всех случаях, когда условие срабатывает!
Таким образом, значение k после выполнения программы равна 5.
Ответ: 5
Продолжаем подготовку к 19 заданию из ЕГЭ по информатике.
Задача (ЕГЭ по информатике, 2019, Москва)
Представленный ниже фрагмент программы обрабатывает элементы одномерного массива A с индексами от 0 до 9. Перед началом выполнения данного фрагмента эти элементы массива имели значения 2, 3, 5, 6, 10, 4, 8, 6, 12, 9 (т.е. A[0] = 2, A[1] = 3, … , A[9] = 9).
Определите значение переменной s после выполнения фрагмента этой программы (записанной ниже на разных языках программирования)
Бейсик | Python |
---|---|
n = 6 s = 0 FOR i = 0 TO 9 IF A(i) > A(n) THEN s = s + (A(i) MOD A(n)) t = A(i) A(i) = A(n) A(n) = t END IF NEXT i |
n = 6 s = 0 for i in range(0, 10): if A[i] > A[n]: s += A[i] % A[n] t = A[i] A[i] = A[n] A[n] = t |
Паскаль | C++ |
n := 6 s := 0 for i:=0 to 9 do begin if A[i] > A[n] then begin s := s + (A[i] mod A[n]); t := A[i]; A[i] := A[n]; A[n] := t; end end; |
n = 6; s = 0; for(i = 1; i <= 9; ++i) { if (A[i] > A[n]) { s += A[i] % A[n]; t = A[i]; A[i] = A[n]; A[n] = t; } } |
Решение:
В начале задаются начальные значения для переменных s и n. Если посмотреть дальше глазами, то видим, что переменная n участвует для указания индекса элемента массива, переменная s — это результат суммы некоторых вычислений.
В ЦИКЛЕ i проходит каждое значение от 0 до 9. В теле Цикла только условие! А в условии проверяется: будет ли элемент массива A с индексом i больше, чем A[n].
В первый раз n=6 (A[6] = 8). Напоминаю, что в этой задаче номера индексов массива начинаются с нуля! Но если условие «сработает», то A[n] поменяется.
Если условие выполнится, то значение A[n] станет равно A[i]. Опять присутствует блок, где элементы массива A[n] и A[i] меняются значениями (Найдите этот кусок кода сами!). И, соответственно, сравнивать в условии будем тоже с новым значением.
Так же, если условие выполнится, то мы к тому, что было к переменной s прибавим значение A[i] mod A[n] (mod — это операция, которая показывает остаток от деления).
Причем, сначала происходит суммирование для переменной s, а потом уже замена значения для A[n].
i | A[i] | A[n] | A[i] > A[n] | A[i] mod A[n] | s |
0 | 2 | 8 | 2 > 8 | — | 0 |
1 | 3 | 8 | 3 > 8 | — | 0 |
2 | 5 | 8 | 5 > 8 | — | 0 |
3 | 6 | 8 | 6 > 8 | — | 0 |
4 | 10 | 8 | 10 > 8 | 2 | 2 |
5 | 4 | 10 | 4 > 10 | — | 2 |
6 | 10 | 10 | 10 > 10 | — | 2 |
7 | 6 | 10 | 6 > 10 | — | 2 |
8 | 12 | 10 | 12 > 10 | 2 | 4 |
9 | 9 | 12 | 9 > 12 | — | 4 |
Таким образом, по окончании данного фрагмента программы, получится в переменной s значение 4.
Ответ: 4
Ещё один пример 19 задания из реального экзамена, который был в 2020 году в Москве!
Задача (ЕГЭ по информатике, 2020, Москва)
Представленный ниже фрагмент программы обрабатывает элементы одномерного целочисленного массива A c индексами от 0 до 11. Перед началом выполнения данного фрагмента эти элементы массива имели значения согласно таблице:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
5 | 43 | 20 | 7 | 13 | 7 | 20 | 13 | 2 | 33 | 15 | 5 |
Определите значение переменной s после выполнения фрагмента этой программы (записанного ниже на разных языках программирования).
Бейсик | Python |
---|---|
s = 0 FOR i = 1 TO 11 IF A(i-1) DIV A(i) < 2 THEN s = s + A(i) ELSE A(i) = A(i) * i END IF NEXT i |
s = 0 for i in range(1, 12): if A[i-1] // A[i] < 2: s += A[i] else: a[i] = a[i] * i |
Паскаль | C++ |
s := 0; for i:=1 to 11 do begin if A[i-1] div A[i] < 2 then begin s := s + A[i] else A[i] := A[i] * i; end end; |
s = 0; for (i = 1; i < 12; ++i ) { if (A[i-1] // A[i] < 2) { s += A[i] } else { A[i] = A[i] * i } } |
Решение:
Цикл «пробегает» весь массив. Здесь переменная i начинает идти с 1, потому что мы внутри тела цикла обращаемся к элементу с индексом i-1. Если бы i пошла с нуля, то получилось бы, что программа обратилась к элементу с индексом -1, и была бы ошибка.
Внутри ЦИКЛА находится одно условие. В условии сразу проверяется меньше ли двух результат от целочисленного деления A[i-1] на A[i] (div — это целочисленное деление, т.е. обычное деление, но дробная часть отбрасывается). Если условие выполнится, то программа к переменной s прибавит элемент A[i]. Если условие не будет выполнено, то элемент A[i] будет умножен на i, и это повлияет на следующую итерацию, ведь массив то изменится.
i | A[i-1] | A[i] | A[i-1] div A[i] < 2 | s | A[i] (в конце итерации) |
1 | 5 | 43 | 0 < 2 | 43 | 43 (в конце итерации) |
2 | 43 | 20 | 2 < 2 | 43 | 40 (в конце итерации) |
3 | 40 | 7 | 5 < 2 | 43 | 21 (в конце итерации) |
4 | 21 | 13 | 1 < 2 | 56 | 13 (в конце итерации) |
5 | 13 | 7 | 1 < 2 | 63 | 7 (в конце итерации) |
6 | 7 | 29 | 0 < 2 | 92 | 29 (в конце итерации) |
7 | 29 | 13 | 2 < 2 | 92 | 91 (в конце итерации) |
8 | 91 | 2 | 45 < 2 | 92 | 16 (в конце итерации) |
9 | 16 | 33 | 0 < 2 | 125 | 33 (в конце итерации) |
10 | 33 | 15 | 2 < 2 | 125 | 150 (в конце итерации) |
11 | 150 | 5 | 30 < 2 | 125 | 55 (в конце итерации) |
Ответ: 125
На этом всё! Счастливого ЕГЭ по информатике!
За это задание ты можешь получить 1 балл. На решение дается около 30 минут. Уровень сложности: высокий.
Средний процент выполнения: 40.2%
Ответом к заданию 25 по информатике может быть развернутый ответ (полная запись решения с обоснованием выполненных действий).
Задача 1
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательноcть.
Среди натуральных чисел, не превышающих 109, найдите все числа, соответствующие маске 352*6?5*, являющиеся полными квадратами.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им квадратные корни.
Решение
for num in range(1, 1000000): num = str(num) fl = False for i in range(len(num)-2): if num[i] == '6' and num[i+2] == '5': fl = True if fl: num = int('352'+num) if int(num ** 0.5) ** 2 == num: print(num, num ** 0.5)
Или можно другое решение, на основе срезов:
for i in range(352605, 10 ** 9): if round(i ** 0.5) ** 2 == i: s = str(i) if s[:3] == '352' and '6' in s[3:-2] and '5' in s[4:] and s.index('6') + 2 == s.rindex('5'): print(i, round(i ** 0.5))
Хотите самое быстрое решение? Вы замечали, что все соседние полные квадраты отличаются друг от друга на нечётное число, при этом это строго возрастающая последовательность нечётных числе. Например, нам даны полные квадраты 1, 4, 9, 16, 25, 36, 49. Разность между ними будет: 3, 5, 7, 9, 11, 13. Правда интересная закономерность? На её основе можно сделать решение:
from fnmatch import fnmatch z = 1189 i = 352836 while i <= 10 ** 9: if fnmatch(str(i), '352*6?5*'): print(i, i ** 0.5) i += z z += 2
Ответ:
352500625 18775
352763524 18782
Ответ:
Задача 2
Назовём маской числа последовательность состоящую из цифр и символ «*» и «?»:
— символ «?» означает ровно одну пропущенную цифру;
— символ «*» означает любую последовательность цифр, включая пустую.
Среди натуральных чисел, больших 106, найдите пять чисел, соответствующие маске 123*4?*9 и делящиеся на 13 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления на 13.
Решение
Запишем решение на языке Python:
k = 0 number = 10 ** 6 + 1 while k < 5: s =str(number) if s[:3] == '123' and s[-1] == '9' and '4' in s[3:-2] and number % 13 == 0: k += 1 print(number, number // 13) number += 1
1230489 94653
1232439 94803
1233479 94883
1234129 94933
1234259 94943
Ответ:
Задача 3
Дан числовой отрезок натуральных чисел: [47584, 47684]. Напишите программу, которая ищет на данном отрезке числа, являющиеся простыми. Простое число — число, которое делится только на единицу и само число.
Для каждого найденного числа запишите через пробел порядковый номер и само число. Каждая следующая найденная пара пишется с новой строки в порядке возрастания простого числа. Например, если подошло два числа: 7 и 13, необходимо записать в ответ:
1 7
2 13
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count == 2:
return max_del
else:
return -1
for x in range(47584, 47684 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Ответ:
1 47591
2 47599
3 47609
4 47623
5 47629
6 47639
7 47653
8 47657
9 47659
10 47681
Ответ:
Задача 4
Дан числовой отрезок натуральных чисел: [10000, 14000]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно два чётных делителя, не считая самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший чётный делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1, 2):
if x % i == 0:
count += 1
max_del = i
if count > 2:
return -1
if count == 2:
return max_del
else:
return -1
for x in range(10000, 14000 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Ответ:
10082 142
10658 146
12482 158
13778 166
Ответ:
Задача 5
Дан числовой отрезок натуральных чисел: [1574, 1600]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно шесть делителей, не считая единицы и самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count > 6:
return -1
if count == 6:
return max_del
else:
return -1
for x in range(1574, 1600 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Решение на C++:
int check(int val){
int count = 0, max = 0;
for (int i = 2; i <= val / 2; ++i)
if (val % i == 0){
count++;
max = i; // последний делитель - наибольший
}
if (count == 6)
return max;
return - 1;
}int main(){
for (int i = 1574; i < 1601; ++i){
int rez = check(i);
if (rez != -1)
cout << i << " " << rez << endl;
}
return 0;
}
Ответ:
1576 788
1578 789
1581 527
1582 791
1586 793
1592 796
1593 531
1595 319
1598 799
1599 533
Ответ:
Задача 6
Дан числовой отрезок натуральных чисел: [124503, 124563]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно шесть делителей, не считая единицы и самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count > 6:
return -1
if count == 6:
return max_del
else:
return -1
for x in range(124503, 124563 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Решение на C++:
int check(int val){
int count = 0, max = 0;
for (int i = 2; i <= val / 2; ++i)
if (val % i == 0){
count++;
max = i; // последний делитель - наибольший
}
if (count == 6)
return max;
return - 1;
}int main(){
for (int i = 192; i <= 237; ++i){
int rez = check(i);
if (rez != -1)
cout << i << " " << rez << endl;
}
return 0;
}
Ответ:
124503 41501
124505 24901
124510 62255
124514 62257
124518 62259
124522 62261
124534 62267
124538 62269
124552 62276
124554 62277
124555 24911
124562 62281
Ответ:
Задача 7
Дан числовой отрезок натуральных чисел: [48724, 48768]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно четыре делителя, не считая единицы и самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count > 4:
return -1
if count == 4:
return max_del
else:
return -1
for x in range(48724, 48768 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Ответ:
48725 9745
48749 1681
48753 16251
Ответ:
Задача 8
Дан числовой отрезок натуральных чисел: [14587, 20598]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно три делителя, не считая единицы и самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count == 3:
return max_del
else:
return -1
for x in range(14587, 20598 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Ответ:
14641 1331
Ответ:
Задача 9
Дан числовой отрезок натуральных чисел: [214, 8475]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно три делителя, не считая единицы и самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count == 3:
return max_del
else:
return -1
for x in range(214, 8475 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Ответ:
625 125
2401 343
Ответ:
Задача 10
Дан числовой отрезок натуральных чисел: [25, 8700]. Напишите программу, которая ищет на данном отрезке числа, у которых сумма делителей (кроме самого числа) равна самому числу.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 6 и 24, необходимо записать в ответ:
6 3
24 12
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Решение на Python:
def check_del(x):
s = 0
max_del = 0
for i in range(1, x//2+1):
if x % i == 0:
s += i
max_del = i
if s == x:
return max_del
else:
return -1
for x in range(25, 8500 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Решение на C++:
int check(int val){
int sum = 0, max = 0;
for (int i = 1; i <= val / 2; ++i)
if (val % i == 0) {
sum += i;
if (i > max) max = i;
}
if (sum == val)
return max;
else
return -1;
}
int main() {
for (int i = 28; i < 8701; ++i) {
int rez = check(i);
if (rez != -1)
cout << i << " " << rez << endl;
}
return 0;
}
Ответы:
28 14
496 248
8128 4064
Ответ:
Задача 11
Дан числовой отрезок натуральных чисел: [178247500, 178543044]. Напишите программу, которая ищет на данном отрезке числа, являющиеся квадратами натуральных чисел.
Для каждого найденного числа запишите через пробел само число и квадратом какого числа оно является. Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 16 и 25, необходимо записать в ответ:
16 4
25 5
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def square(x):
num = int(x ** 0.5)
if num**2 == x:
return num
else:
return -1
for x in range(178247500, 178543044 + 1):
num = square(x)
if num != -1:
print(x, num)
Ответ:
178249201 13351
178275904 13352
178302609 13353
178329316 13354
178356025 13355
178382736 13356
178409449 13357
178436164 13358
178462881 13359
178489600 13360
178516321 13361
178543044 13362
Ответ:
Задача 12
Дан числовой отрезок натуральных чисел: [2147850, 2478350]. Напишите программу, которая ищет на данном отрезке числа, являющиеся кубами натуральных чисел.
Для каждого найденного числа запишите через пробел само число и кубом какого числа оно является. Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 27 и 8, необходимо записать в ответ:
8 2
27 3
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def cube(x):
num = 1
while num**3 < x:
num += 1
if num**3 == x:
return num
else:
return -1
for x in range(2147850, 2478350 + 1):
num = cube(x)
if num != -1:
print(x, num)
Ответ:
2197000 130
2248091 131
2299968 132
2352637 133
2406104 134
2460375 135
Ответ: