Демонстрационный вариант ЕГЭ 2018 г. – задание №25 — Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит количество элементов массива, больших 100 и при этом кратных 5, а затем заменяет каждый такой элемент на число, равное найденному количеству.
Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести измененный массив, каждый элемент массива выводится с новой строчки.
Например, для массива из шести элементов: 4 115 7 195 25 106 программа должна вывести числа 4 2 7 2 25 106
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
| Бейсик | Python |
CONST N AS INTEGER = 30 DIM A (1 TO N) AS LONG DIM I AS LONG, J AS LONG, 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())) ... |
| Алгоритмический язык | Паскаль |
алг нач цел N = 30 целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц ... кон |
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. |
| C++ | |
#include <iostream>
using namespace std;
const int N = 30;
int main() {
long a[N];
long i, j, k;
for (i = 0; i<N; i++)
cin >> a[i];
...
return 0;
}
|
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и
используемую версию языка программирования, например Free Pascal 2.6).
В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).
Решение:
На языке Паскаль
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
На Алгоритмическом языке
k := 0 нц для i от 1 до N если a[i] > 100 и mod(a[i], 5) = 0 то k := k + 1 все кц нц для i от 1 до N если a[i] > 100 и mod(a[i], 5) = 0 то a[i] := k все вывод a[i], нс кц
На языке Бейсик
K = 0 FOR I = 1 TO N IF A(I) > 100 AND A(I) MOD 5 = 0 THEN K = K + 1 END IF NEXT I FOR I = 1 TO N IF A(I) > 100 AND A(I) MOD 5 = 0 THEN A(I) = K END IF PRINT A(I) NEXT I
На языке С++
k = 0;
for (i = 0; i < N; i++)
if (a[i] > 100 && a[i]%5 == 0)
k++;
for (i = 0; i < N; i++) {
if (a[i] > 100 && a[i]%5 == 0)
a[i] = k;
cout << a[i];
}
На языке Python
k = 0 for i in range(0, n): if (a[i] > 100 and a[i] % 5 == 0): k = k + 1 for i in range(0, n): if (a[i] > 100 and a[i] % 5 == 0): a[i] = k print(a[i])
Демонстрационный вариант ЕГЭ 2017 г. – задание №25 — Дан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых десятичная запись хотя бы одного числа оканчивается на 2. В данной задаче под парой подразумевается два подряд идущих элемента массива.
Например, для массива из пяти элементов: 16 3 142 55 22 – ответ: 3.
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Бейсик
CONST N = 40 DIM A (1 TO N) AS INTEGER DIM I, J, K, AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I ... END
Python
//допускается также использовать //две целочисленные переменные j и k a = [] n = 40 for i in range(0, n): a.append(int(input())) ...
Алгоритмический язык
алг нач цел N = 40 целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц ... кон
Паскаль
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.
Си
#include <stdio.h>
#define N 40
int main() {
int a[N];
int i, j, k;
for (i = 0; i < N; i++)
scanf("%d", &a[i]);
...
return 0;
}
Естественный язык
Объявляем массив A из 40 элементов. Объявляем целочисленные переменные I, J, K. В цикле от 1 до 40 вводим элементы массива A с 1-го по 40-й. …
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
Решение:
Содержание верного ответа и указания по оцениванию
(допускаются иные формулировки решений, приводящие к правильному результату)
На языке Паскаль
k := 0; for i := 1 to N - 1 do if (a[i] mod 10 = 2) or (a[i + 1] mod 10 = 2) then inc(k); writeln(k);
На алгоритмическом языке
k := 0; нц для i от 1 до N-1 если mod(a[i],10)=2 или mod(a[i+1],10)=2 то k := k+1 все кц вывод k
На языке Бейсик
K = 0 FOR I = 1 TO N - 1 IF (A(I) MOD 10 = 2) OR (A(I + 1) MOD 10 = 2) THEN K = K + 1 END IF NEXT I PRINT K
На языке Си
k = 0;
for (i = 0; i < N - 1; i++)
if (a[i] % 10 == 2 || a[i + 1] % 10 == 2)
k++;
printf("%d", k);
На языке Python
k = 0 for i in range(0, n – 1): if (a[i] % 10 == 2 or a[i + 1] % 10 == 2): k += 1 print(k)
| Указания по оцениванию | Баллы |
| Общие указания 1. В алгоритме, записанном на языке программирования, допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора программы. 2. Эффективность алгоритма не имеет значения и не оценивается. 3. Допускается запись алгоритма на языке программирования, отличном от языков, перечисленных в условии. В этом случае должны использоваться переменные, аналогичные описанным в условии. Если язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных на естественном языке. Использование нетипизированных или необъявленных переменных возможно только в случае, если это допускается языком программирования; при этом количество переменных и их идентификаторы должны соответствовать условию задачи |
|
| Предложен правильный алгоритм, выдающий в качестве результата верное значение |
2 |
| Не выполнены условия, позволяющие поставить 2 балла. Предложено в целом верное решение, содержащее не более одной ошибки из числа следующих: 1) в цикле происходит выход за границу массива (например, при использовании цикла от 1 до N); 2) не инициализируется или неверно инициализируется счётчик количества найденных пар; 3) счётчик количества пар в цикле не изменяется или изменяется неверно; 4) неверно выделяется последняя цифра числа; 5) при проверке выполнения условия для пары элементов используются неверные индексы; 6) последняя цифра выделяется не у самих элементов массива, а у их индексов; 7) в сложном логическом условии простые проверки верны, но условие в целом построено неверно (например, перепутаны операции «И» и «ИЛИ», неверно расставлены скобки в логическом выражении); 8) отсутствует вывод ответа; 9) используется переменная, не объявленная в разделе описания переменных; 10) не указано или неверно указано условие завершения цикла; 11) индексная переменная в цикле не меняется (например, в цикле while) или меняется неверно; 12) неверно расставлены операторные скобки |
1 |
| Не выполнены условия, позволяющие поставить 1 или 2 балла | 0 |
| Максимальный балл | 2 |
Демонстрационный вариант ЕГЭ 2016 г. – задание №25
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –10 000 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 3. В данной задаче под парой подразумевается два подряд идущих элемента массива.
Например, для массива из пяти элементов: 6; 2; 9; –3; 6 – ответ: 4.
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Бейсик
CONST N AS INTEGER = 20
DIM A (1 TO N) AS INTEGER
DIM I AS INTEGER,
J AS INTEGER,
K AS INTEGER
FOR I = 1 TO N
INPUT A(I)
NEXT I
...
END
Python
# допускается также
# использовать две
# целочисленные переменные j и k
a = []
n = 20
for i in range(0, n):
a.append(int(input()))
...
Алгоритмический язык
алг
нач
цел N = 20
целтаб a[1:N]
цел i, j, k
нц для i от 1 до N
ввод a[i]
кц
...
кон
Паскаль
const
N = 20;
var
a: array [1..N] of integer;
i, j, k: integer;
begin
for i := 1 to N do
readln(a[i]);
...
end.
Си
#include <stdio.h>
#define N 20
int main() {
int a[N];
int i, j, k;
for (i = 0; i < N; i++)
scanf("%d", &a[i]);
...
return 0;
}
Естественный язык
Объявляем массив A из 20 элементов. Объявляем целочисленные переменные I, J, K. В цикле от 1 до 20 вводим элементы массива A с 1-го по 20-й. …
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
Решение:
Содержание верного ответа и указания по оцениванию
(допускаются иные формулировки решений, приводящие к правильному результату)
На языке Паскаль
k := 0; for i := 1 to N-1 do if (a[i] mod 3=0) or (a[i+1] mod 3=0) then inc(k); writeln(k);
На алгоритмическом языке
k := 0; нц для i от 1 до N-1 если mod(a[i],3)=0 или mod(a[i+1],3)=0 то k := k+1 все кц вывод k
На языке Бейсик
K = 0 FOR I = 1 TO N-1 IF (A(I) MOD 3 = 0) OR (A(I + 1) MOD 3 = 0) THEN K = K+1 END IF NEXT I PRINT K
На языке Си
k = 0;
for (i = 0; i<N-1; i++)
if (a[i]%3 == 0 || a[i+1]%3 == 0)
k++;
printf("%d", k);
На языке Python
k = 0 for i in range(0, n – 1): if (a[i] % 3 == 0 or a[i + 1] % 3 == 0): k += 1 print(k)
На естественном языке
Записываем в переменную K начальное значение, равное 0. В циклеот первого элемента до предпоследнего находим остаток от деления текущего и следующего элемента массива на 3. Если первый или второй из
полученных остатков равен 0, увеличиваем переменную K на единицу. После завершения цикла выводим значение переменной K
ЕГЭ 16.06.2016 по информатике. Основная волна. Вариант 41 (Часть С)
Дан массив из 2000 элементов. Хорошей парой называется пара элементов, из которых оба оканчиваются на 9, при этом элементы являются соседями. Посчитайте количество хороших пар. Каждый элемент по модулю не превышает 30 000. В ответе укажите кусок программы на месте многоточия. Разрешено не использовать некоторые из инициализированных переменных, но запрещено пользоваться переменными, не указанными ниже.
const N = 2000; var i,j,k: integer; a:array[1..N] of integer; begin for i:=1 to N do readln(a[i]); ... end.
Решение:
С++
k = 0; for (i = 0; i<N-1; i++) if (a[i]%10 == 9 && a[i+1]%10 == 9) k++; cout<<k;
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за итоговый тест по информатике. Для получения положительной оценки за тест требовалось набрать не менее 20 баллов. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит минимальный балл среди учащихся, получивших за тест положительную оценку. Известно, что в классе хотя бы один учащийся получил за тест положительную оценку. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Паскаль
const N=30;
var a: array [1..N] of integer;
i, j, min: integer;
begin
for i:=1 to N do readln(a[i]);
...
end.
|
Си
#include<stdio.h>
int main(void) {
const int N=30;
int a[N];
int i, j, min;
for (i=0; i<N; i++)
scanf(″%d″, &a[i]);
...
}
|
Решение:
Паскаль
min := 100;
for i:=1 to N do
if (a[i] >= 20) and (a[i] < min) then
min := a[i];
writeln ( min );
С++
min = 100;
for (i=0; i<N; i++)
if (a[i] >= 20 && a[i] < min)
min = a[i];
cout<<min;
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса, полученные на экзамене по информатике. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет найти и вывести количество учащихся, чьи баллы на экзамене выше среднего балла по классу. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Паскаль
const N=30;
var a: array [1..N] of integer;
i, j: integer;
s: real;
begin
for i:=1 to N do readln(a[i]);
...
end.
|
Си
#include<stdio.h>
int main(void) {
const int N=30;
int a[N];
int i, j;
float s;
for (i=0; i<N; i++)
scanf(″%d″, &a[i]);
...
}
|
Решение:
Паскаль
s:= 0; for i:=1 to N do s:= s + a[i]; j:= 0; for i:=1 to N do if a[i]*N > s then j:= j + 1; writeln(j)
С++
s = 0;
for (i=0; i<N; i++)
s = s + a[i];
j= 0;
for (i=0; i<N; i++)
if (a[i]*N > s)
j= j + 1;
cout<<j;
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит сумму наибольшей по длине возрастающей последовательности подряд идущих элементов. Если таких последовательностей несколько, можно вывести любую из них. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Паскаль
const N=30;
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<stdio.h>
int main(void) {
const int N=30;
int a[N];
int i, l, lmax, s, smax;
for (i=0; i<N; i++)
scanf(″%d″, &a[i]);
...
}
|
Решение:
Паскаль
lmax:=0; l:=1; s:=a[1];
for i:=2 to N do begin
if a[i] > a[i-1] then begin
l:=l+1; s:=s+a[i];
end
else begin
l:=1; s:=a[i];
end;
if l > lmax then begin
lmax:=l;
smax:=s;
end
end;
writeln(smax);
С++
lmax=0; l=1; s=a[0];
for (i=1; i<N; i++){
if (a[i] > a[i-1]){
l=l+1; s=s+a[i];
}
else{
l=1; s=a[i]
};
if (l > lmax){
lmax=l;
smax=s;
};
}
cout<<smax);
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номера двух элементов массива, сумма которых минимальна. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Паскаль
const N=30;
var a: array [1..N] of integer;
i, j, min, min2, s: integer;
begin
for i:=1 to N do readln(a[i]);
...
end.
|
Си
#include<stdio.h>
int main(void) {
const int N=30;
int a[N];
int i, j, min, min2, s;
for (i=0; i<N; i++)
scanf(″%d″, &a[i]);
...
}
|
Решение:
Паскаль
if a[1] < a[2] then begin
min := 1; min2:= 2
end
else begin
min:= 2; min2:= 1
end;
for i:=3 to N do
if a[i] < a[min] then begin
min2 := min;
min := i
end
else if a[i] < a[min2] then min2 := i;
writeln(min, ' ', min2)
C++
if (a[0] < a[1]){
min = 0; min2 = 1;
}
else{
min = 1; min2= 0;
};
for (i=2; i<N; i++)
if (a[i] < a[min]){
min2 = min;
min = i;
}
else if (a[i] < a[min2]) min2 = i;
cout<<min+1<<' '<<min2+1;
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номера двух элементов массива, наименее отличающихся друг от друга. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Паскаль
const N=30;
var a: array [1..N] of integer;
i, j, min, min2, s: integer;
begin
for i:=1 to N do readln(a[i]);
...
end.
|
Си
#include<stdio.h>
int main(void) {
const int N=30;
int a[N];
int i, j, min, min2, s;
for (i=0; i<N; i++)
scanf(″%d″, &a[i]);
...
}
|
Решение:
Паскаль
min:=1; min2:=2;
s:=abs(a[1]-a[2]);
for i:=1 to N-1 do
for j:=i+1 to N do
if abs(a[i]-a[j]) < s then begin
s:=abs(a[i]-a[j]);
min:=i; min2:=j;
end;
writeln(min);
writeln(min2);
C++
min=0; min2=1;
s=abs(a[0]-a[1]);
for (i=0; i<N-1; i++)
for (j=i+1; j<N; j++)
if (abs(a[i]-a[j]) < s){
s=abs(a[i]-a[j]);
min=i; min2=j
};
cout<<min<<" "<<min2;
Дан целочисленный массив из 30 элементов, все элементы которого – положительные числа, не превосходящие 100. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номер элемента, имеющего максимальное количество целочисленных делителей (если таких элементов несколько, то номер любого из них). Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них
const N=30; var a: array [l..N] of integer; i,j,k,imax,kmax: integer; begin for i:=l to N do readln(a[i]); ... end.
|
#include<stdio.h>
int main(void) {
const int N=30;
int a[N];
int i, j, k, imax, kmax;
for(i=0; i<N; i++)
scanf(″%d″, &a[i]);
...
}
|
Решение:
Паскаль
kmax:=0;
for i:=1 to N do begin
k:=0;
for j:=1 to a[i] do
if a[i] mod j = 0 then k:= k + 1;
if k > kmax then begin
imax := i; kmax := k;
end
end;
writeln(imax);
C++
kmax = 0;
for (i=0; i<N; i++){
k=0;
for(j=1; j<=a[i]; j++)
if (a[i] % j == 0) k = k + 1;
if (k > kmax){
imax = i; kmax = k;
};
};
cout<<imax+1;
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 100. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести произведение двузначных элементов массива, которые не делятся на 6. Гарантируется, что в исходном массиве есть хотя бы один такой элемент. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них. Исходные данные всегда подобраны так, что результат произведения не выходит за пределы объявленных типов данных.
const N=30;
var a: array [1..N] of longint;
і, j, p: longint;
begin
for і := 1 to N do
readln(a[i]);
...
end.
|
#include<stdio.h>
int main(void) {
const int N=30;
int a[N];
int і, j, p;
for (i=0; i< N; i++)
scanf(″%d″, &a[i]);
...
}
|
Решение:
Паскаль
p:= 1; for i:=1 to N do if (10 <= a[i]) and (a[i] <= 99) and (a[i] mod 6 <> 0) then p:= p*a[i]; writeln(p);
C++
p = 1; for (i=0; i<N; i++) if (10 <= a[i] && a[i] <= 99 && a[i] % 6 > 0) p = p*a[i]; cout<<p;