Содержание:
ЕГЭ по информатике 17 задания объяснение
Уровень сложности — повышенный,
Требуется использование специализированного программного обеспечения — да,
Максимальный балл — 1,
Примерное время выполнения — 15 минут.
Проверяемые элементы содержания: Умение создавать собственные программы (20–40 строк) для обработки целочисленной информации
Выполнение 17 задания ЕГЭ
Плейлист видеоразборов задания на YouTube:
Задание демонстрационного варианта 2022 года ФИПИ
Рассматривается множество целых чисел, принадлежащих числовому отрезку [1016; 7937], которые делятся на 3 и не делятся на 7, 17, 19, 27. Найдите количество таких чисел и максимальное из них.
В ответе запишите два целых числа: сначала количество, затем максимальное число.
Ответ: 1568 | 7935
Видео
✍ Решение:
-
✎ Решение с использованием программирования:
- Первое значение диапазона введем в ячейку A1:
- Используем прогрессию для заполнения всего диапазона числами. Для это выберите вкладку Главная и щелкните по кнопке Прогрессия:
- Столбец B будем использовать для поиска чисел, которые делятся на 3. Для этого в ячейку B1 введите формулу с рисунка:
- Двойным щелчком по маркеру заполнения скопируйте формулу на весь столбец:
- Столбец С будем использовать для поиска чисел, которые НЕ делятся на 7. Для этого в ячейку С1 введите формулу с рисунка:
- Заполните весь столбец двойным щелчком по маркеру заполнения.
- Cтолбцы D, E, F таким же образом будем использовать для поиска чисел столбца А, которые не делятся на 17, 19 и 27
- Для поиска всех истинных значений используем столбец G. В ячейку G1 введите функцию
ЕСЛИ
: если все значения ячеек в столбцах B-F в этой строке истинны, выводим число из А1, иначе – пустую строку: - Ячейку H1 будем использовать для подсчета таких чисел, которые удовлетворяют всем условиям, т.е. для подсчета непустых ячеек столбца G:
- Ячейку H2 будем использовать для подсчета такого наибольшего числа:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | var i, k, max: integer; begin k := 0; max := 0; for i := 1016 to 7937 do begin if (i mod 3 = 0) and (i mod 7 > 0) and (i mod 17 > 0) and (i mod 19 > 0) and (i mod 27 > 0) then begin max:= i; inc(k); end; end; writeln(k, ' ', max) end. |
PascalABC.NET:
1 2 3 4 | begin var s := Range( 1017, 7937, 3).Where( i -> not i.DivsAny(7, 17, 19, 27) ); print( s.Count, s.Max ); end. |
Python:
1 2 3 | a = [n for n in range(1016,7937+1) if (n%3==0 and n%7!=0 and n%17!=0 and n%19!=0 and n%27!=0)] print(len(a),max(a)) |
n%3==0
(число делится на 3), n%7!=0
(число не делится на 7) и т.п.
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <iostream> int main() { int count = 0; int maxGood = 0; for(int n=1016; n<=7937; n++) if( (n % 3 == 0) and (n % 7 != 0) and (n % 17 != 0) and (n % 19 != 0) and (n % 27 != 0) ) { maxGood = n; count += 1; } std::cout << count << " " << maxGood; } |
✎ Решение с помощью Excel:
Заполните весь столбце, используя маркер автозаполнения.
Видеоразбор 17 задания ЕГЭ:
📹 YouTube здесь
Видеорешение на RuTube здесь
Работа с цифрами числа в n-й системе счисления
Рассматривается множество целых чисел, принадлежащих числовому отрезку [3712; 8432], которые удовлетворяют следующим условиям:
− запись в двоичной и четверичной системах счисления заканчивается одинаковой цифрой;
− кратны 13, 14 или 15.
Найдите количество таких чисел и минимальное из них.
Ответ: 471 3720
✍ Решение:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var var k, n, min:integer; begin k:=0; min:=8433; for n:= 3712 to 8432 do if (n mod 2 = n mod 4) and ((n mod 13=0) or (n mod 14=0) or (n mod 15=0)) then begin if min>n then min:=n; k:=k+1; end; Writeln (k,' ',min); End. |
PascalABC.NET:
1 2 3 4 5 6 7 | begin var s := Range( 3712, 8432) .Where(i -> ((i mod 13=0) or (i mod 14=0) or (i mod 15=0)) and (i mod 2 = i mod 4)); // или: .Where( i -> (i.DivsAny(13,14,15)) and (i mod 2 = i mod 4)); s.Count.Print; s.Min.Print; end. |
Python:
1 2 | L = [x for x in range(3712, 8432+1) if (x % 13 == 0 or x % 14 == 0 or x % 15 == 0) and ( x % 2 == x % 4)] print(len(L),' ',L[0]) |
L
только из подходящих элементов, то есть удовлетворяющих всем, перечисленным в задании, условиям. Затем выводим длину списка (len(L)
), т.е. найденное количество таких чисел, и нулевой элемент, он же минимальный, поскольку числа упорядочены по возрастанию (L[0]
)C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <iostream> int main() { int count = 0; int min = 8433; for (int n = 3712; n <= 8432; n++) if (((n % 2 == n % 4) && ((n % 13 == 0) || (n % 14 == 0) || (n % 15 == 0))) ) { if (n < min) min = n; count += 1; } std::cout << count << " " << min; } |
✎ Решение с помощью Excel:
ЕСЛИ
: если все значения ячеек в столбцах B, C в этой строке истинны, выводим число из А1, иначе – пустую строку:D
визуально и найдите первое значение):
Рассматривается множество целых чисел, принадлежащих числовому отрезку [1000; 9999], запись которых в пятеричной системе имеет не менее 6 цифр и заканчивается на 21 или 23.
Найдите количество таких чисел и минимальное из них.
Ответ: 550 3136
✍ Решение:
PascalABC.NET:
1 2 3 4 5 6 | ### uses school; var s := Range(1000, 9999) .Where(i -> (i.ToString.ToBase(5).Length=6) and (i div 5 mod 5 = 2) and((i mod 5 = 1) or (i mod 5 = 3))); s.Count.Print; s.Min.Print; |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | numb='' result=list() for i in range(1000, 9999+1): if ((i // 5) % 5 ==2) and (( i % 5 == 1) or ( i % 5 == 3)): while i>=5: #Цикл перевода числа из 10-й в 5-ю сс s=i%5 numb=str(s)+numb i=i//5 if i<5: numb=str(i)+numb n=len(numb) if n>5: result.append(numb) # список из чисел в 5-й с.с numb="" kolvo=len(result) minNumb=int(min(result),5) # перевод в десятичную с.с и поиск min print(kolvo,minNumb) |
Светлана
В задании 17_2: 17 опечатка
Программа с++ строка 9
if (min == 8433) min = n;
надо
if (n<min) min = n;
Володя
Вот код к последней задаче на привычном паскале, если кому надо.
function per(ch,osn:int64):int64;
var i,r,r1:int64;s:array [1..100] of int64;
begin
r:=1;
r1:=1;
while (ch>0) do begin
s[r]:=ch mod osn;
ch:=ch div osn;
r:=r+1;
end;
for i:=1 to r do begin
ch:=ch+s[i]*r1;
r1:=r1*10;
end;
per:=ch;
end;
var i,count,min:int64;
begin
count:=0;
min:=10000;
for i:=1000 to 9999 do begin
if (per(i,5)>99999) and (per(i,5)i) then min:=i;
end;
end;
writeln(count,’ ‘,min);
end.
Володя
Сайт немного обрезал программу. Вот основное тело.
begin
count:=0;
min:=10000;
for i:=1000 to 9999 do begin
if (per(i,5)>99999) and (per(i,5)i) then min:=i;
end;
end;
writeln(count,’ ‘,min);
end.