Перейти к содержимому

Напишите программу которая ищет среди целых чисел принадлежащих числовому отрезку 312614 312651

  • автор:

Математика 208

Текстовый файл состоит из заглавных букв латинского алфавита. Определите максимальное количество подряд идущих символов, среди которых нет сочетания DD, но есть сочетание FE.

Для выполнения этого задания следует написать программу.

Файлы к заданию: 24.txt

2 (Уровень: Средний)

Текстовый файл состоит из символов A, C, D, F и O.

Определите максимальное количество идущих подряд символов, среди которых нет подстроки вида

согласная + гласная + гласная + согласная

в прилагаемом файле.

Для выполнения этого задания следует написать программу.

3 (Уровень: Сложный)
Строка содержит символы латинского алфавита. Определите максимальную длину подстроки не содержащей подстрок, отличающейся от «DANOV» лишь на одну букву.

Файлы к заданию: 24.txt

четверг, 16 февраля 2023 г.

Задание 10б

Домашнее задание (9кл)

Откройте файл (скачать) с данной электронной таблицей. На основании данных, содержащихся в этой таблице, ответьте на два вопроса.

1.  Сколько городов США представлено в таблице? Ответ запишите в ячейку F2.

2.  Какова средняя численность населения городов, количество жителей которых не превышает 100 тыс. человек? Ответ на этот вопрос с точностью не менее двух знаков после запятой (в тыс. чел.) запишите в ячейку F3 таблицы.

3.  Постройте круговую диаграмму, отображающую соотношение количества городов Австрии, Египта и Турции, представленных в таблице. Левый верхний угол диаграммы разместите вблизи ячейки G6.

понедельник, 13 февраля 2023 г.

Задание 10б ,11а

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

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

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

Например, в диапазоне [12; 15] ровно шесть различных натуральных делителей имеет число 12, поэтому для этого диапазона вывод на экране должна содержать следующие значения:

2) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

– символ «?» означает ровно одну произвольную цифру;

– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих 10 8 , найдите все числа, соответствующие маске *1?542?, делящиеся на 2084 без остатка.

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

ЕГЭ. Информатика. 25 задание.

Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.

Пример. Маске 123*4? 5 соответствуют числа 123 405 и 12 376 415.

Найдите все натуральные числа, не превышающие 1010, которые соответствуют маске 1? 493*41 и при этом без остатка делятся на 2023. В ответе запишите все найденные числа в порядке возрастания.

Е25.2. Запишите в ответе сумму всех найденных простых чисел

Запишите в ответе сумму всех найденных простых чисел.

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [1024; 289212], простые числа, то есть числа, имеющие ровно два натуральных делителя: единицу и само число. Запишите в ответе сумму всех найденных простых чисел.

Например, в диапазоне [3; 9] есть следующие простые числа: 3,5,7. Поэтому для этого диапазона ответом является 3+5+7=15.

25 задание ЕГЭ по информатике

25-е задание: «Программная обработка целочисленной информации»
Уровень сложности — высокий,
Требуется использование специализированного программного обеспечения — да,
Максимальный балл — 2,
Примерное время выполнения — 20 минут.

Проверяемые элементы содержания: Умение создавать собственные программы (10–20 строк) для обработки целочисленной информации

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

Типичные ошибки и рекомендации по их предотвращению:

«Часто бывает, что увлекшись написанием решения, экзаменуемый совершает ошибки в простых ситуациях: организация ввода-вывода, описание и инициализация переменных, обработка массива (выход за границу) и т.д. Эти ошибки могут стоить Вам нескольких баллов, старайтесь их не допускать»

Алгоритмизация и программирование

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

Решение 25 заданий ЕГЭ по информатике

Плейлист видеоразборов задания на YouTube:
Задание демонстрационного варианта 2022 года ФИПИ

Делители числа

25_7:

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

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

begin var divCount := 4; for var n := 126849 to 126871 do begin var divs := new List<integer>; for var d := 1 to n do if n mod d = 0 then begin divs.Add(d); if divs.Count > divCount then break; end; if divs.Count = divCount then begin divs.Sort(); Println(divs); end; end; end.

for n in range(126849,126871+1): divs = [] # чистим список делителей for d in range(1,n+1): # if n % d == 0: divs = divs + [d] # добавляем делитель в список if len(divs) > 4: break if len(divs) == 4: print(*divs)

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

begin var divCount := 4; for var n := 126849 to 126871 do begin var divs := new List<integer>; var d := 1; while d * d <= n do // можно цикл for var d := 1 to round(sqrt(n)) do begin if n mod d = 0 then begin divs.Add(d); if d * d <> n then divs.Add(n div d); if divs.Count > divCount then break; end; d := d+1; end; if divs.Count = divCount then begin divs.Sort(); Println(divs); end; end; end.

# import math # для квадратного корня числа (sqrt) divCount = 4 # нужное количество делителей for n in range(126849,126871 + 1): divs = [] # чистим список делителей d = 1 # вместо while можно цикл for d in range(1,round(math.sqrt(n))): while d*d <= n: # перебор делителей if n % d == 0: divs.append(d) # добавляем делитель в список if d != n//d: # если делитель — не точный квадратный корень n divs.append(n//d) if len(divs) > divCount: break d+=1 if len(divs) == divCount: divs.sort() print(divs)

✎ Решение: Генерация списка делителей.
Общая идея:

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 )

Ответ:

25_8:

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [164700; 164752], числа, имеющие ровно 6 различных делителей.
Выведите эти делители для каждого найденного числа в порядке возрастания.

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

begin var divCount := 6; for var n := 164700 to 164752 do begin var divs := new List<integer>; for var d := 1 to round(sqrt(n)) do if n mod d = 0 then begin divs.Add(d); if d * d <> n then divs.Add(n div d); if divs.Count > divCount then break; end; if divs.Count = divCount then begin divs.Sort(); Println(divs); end; end; end.

import math # для квадратного корня sqrt divCount = 6 # нужное количество делителей for n in range(164700, 164752 + 1): divs = [] # чистим список делителей for d in range(1,round(math.sqrt(n))): # перебор делителей if n % d == 0: divs.append(d) # добавляем делитель в список if d != n//d: divs.append(n//d) if len(divs) > divCount: break if len(divs) == divCount: divs.sort() print(divs)

✎ Решение: Генерация списка делителей.
Общая идея:

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 )

Ответ:

25_9:

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

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

begin var divs := new integer[4]; for var n := 190201 to 190230 do begin var i := 0; // для индекса массива for var d := 1 to n do begin if n mod d = 0 then begin if i < 4 then divs[i] := d; inc(i); end; if i > 4 then break; end; if i = 4 then begin println(divs.Reverse()) end; end; end.

for n in range(190201,190230+1): divs = [] # чистим список делителей for d in range(1,n+1): # if n % d == 0: divs = divs + [d] # добавляем делитель в список if len(divs) > 4: break if len(divs) == 4: divs.reverse() print(*divs)

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

begin var divCount := 4; for var n := 190201 to 190230 do begin var divs := new List<integer>; for var d := 1 to round(sqrt(n)) do if n mod d = 0 then begin divs.Add(d); if d * d <> n then divs.Add(n div d); if divs.Count > divCount then break; end; if divs.Count = divCount then begin divs.Sort(); divs.Reverse(); Println(divs); end; end; end.

import math # для квадратного корня sqrt divCount = 4 # нужное количество делителей for n in range(190201, 190230 + 1): divs = [] # чистим список делителей for d in range(1,round(math.sqrt(n))): # перебор делителей if n % d == 0: divs.append(d) # добавляем делитель в список if d != n//d: divs.append(n//d) if len(divs) > divCount: break if len(divs) == divCount: divs.sort() divs.reverse() print(divs)

✎ Решение: Генерация списка делителей.
Общая идея:

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 )

Ответ:

Видеоразбор задания:

📹 YouTube здесь
📹 Видеорешение на RuTube здесь

25_10:

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190201; 190280], числа, имеющие ровно 4 различных ЧЁТНЫХ делителя.
Выведите эти четыре делителя для каждого найденного числа в порядке убывания.

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

begin var divs := new integer[4]; for var n := 190201 to 190280 do begin var i := 0; // для индекса массива for var d := 1 to n do begin if (n mod d = 0) and (d mod 2 = 0) then begin if i < 4 then divs[i] := d; inc(i); end; if i > 4 then break; end; if i = 4 then begin println(divs.Reverse()) end; end; end.

for n in range(190201,190280+1): divs = [] # чистим список делителей for d in range(1,n+1): # if n % d == 0 and d%2==0: divs = divs + [d] # добавляем делитель в список if len(divs) > 4: break if len(divs) == 4: divs.reverse() print(*divs)

✎ Решение: Генерация списка делителей.

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 )

Ответ:

25_11:

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

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

begin var max := 0; var divsMax := new List<integer>; for var n := 394441 to 394505 do begin var divs := new List<integer>; for var d := 1 to n do if n mod d = 0 then divs.Add(d); if divs.Count > max then begin max := divs.Count; divsMax := divs; end; end; divsMax.Reverse(); print(max, divsMax[0], divsMax[1]) end.

maxim = 0 # нужное количество делителей divsMax = [] for n in range(394441, 394505 + 1): divs = [] # чистим список делителей for d in range(1,n+1): # перебор делителей if n % d == 0: divs.append(d) # добавляем делитель в список if len(divs) > maxim: maxim = len(divs) divsMax = divs divsMax.reverse() print(maxim,divsMax[0],divsMax[1])

✎ Решение (Генерация списка делителей):

maxim=0 divsmax=[] for n in range(394441, 394505+1): divs = [d for d in range(1, n+1) if n % d == 0] if len(divs) > maxim: maxim = len(divs) divsmax = divs # сохраняем делители для числа с макс кол-вом дел-ей divsmax.reverse() print(maxim, divsmax[0], divsmax[1])

Ответ: 48 394450 197225

Простые числа

25_12:

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

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

begin var count := 0; for var n := 3532160 downto 3532000 do // цикл с конца begin var flag := true; for var d := 2 to n — 1 do // перебор делителей, начиная с двух до n-1 begin if n mod d = 0 then begin // есть делитель помимо единицы и самого n flag := false; // число не простое break; end; end; if flag = true then // если число простое begin inc(count); Println(count, n); end; end; end.

count = 0 for n in range(3532160, 3532000-1, -1): # цикл с конца и с шагом (-1) flag = True for d in range(2, n): # перебор делителей, начиная с двух if n % d == 0: # есть делитель помимо единицы и самого n flag = False # число не простое break if flag == True: # число простое count+=1 print(count , n)

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

begin var count := 0; for var n := 3532160 downto 3532000 do // цикл с конца begin var flag := true; var d := 2; while d * d <= n — 1 do // перебор делителей, начиная с двух begin if n mod d = 0 then begin // есть делитель помимо единицы и самого n flag := false; // число не простое break; end; d := d + 1; end; if flag = true then // если число простое begin inc(count); Println(count, n); end; end; end.

count = 0 for n in range(3532160, 3532000-1, -1): # цикл с конца и с шагом (-1) flag = True d = 2 while d*d <= n-1: # перебор делителей, начиная с двух if n % d == 0: # есть делитель помимо единицы и самого n flag = False # число не простое break d+=1 if flag == True: # число простое count+=1 print(count , n)

Ответ:

Задания прошлых лет для тренировки (до 2021)

Задачи с поэлементной обработкой массива

Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество элементов массива НЕ кратных 3.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.

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;
  • счетчик всегда нужно обнулять, поэтому следующим оператором будет:

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 задания:

Задачи на обработку элементов массива с последующей заменой

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10000 включительно. Опишите на одном из языков программирования алгоритм, который находит количество элементов массива, больших 100 и при этом кратных 5, а затем заменяет каждый такой элемент на число, равное найденному количеству. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести измененный массив, каждый элемент массива выводится с новой строчки.

Например, для массива из шести элементов: 4 115 7 195 25 106
программа должна вывести числа 4 2 7 2 25 106

Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

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). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

✍ Решение:

    Решение на языке Паскаль:

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

Дан массив, содержащий неотрицательные целые числа. Необходимо вывести:

Например, для массива из шести элементов: 4 6 12 17 3 8
ответом будет 12 — наибольшее чётное число, поскольку чётных чисел в этом массиве больше

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

# допускается также использовать # целочисленные переменные j, k, m a = [] n = 2000 // менять значение n нельзя for i in range(0, n): a.append(int(input()))

✍ Решение:

    Решение на языке Python:

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.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

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 := 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);

Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от -10 000 до 10 000 включительно. Опишите алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых сумма элементов делится на 2, но не делится на 4. В данной задаче под парой подразумевается два подряд идущих элемента массива.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

# допускается также использовать # две целочисленные переменные # j и k a = [] n = 20 for i in range(0, n): a.append(int(input()))

    Проанализируем данный фрагмент кода на языке Python:

for i in range(0, n-1): j = a[i] + a[i+1] if j%2 == 0 and j%4 != 0:

. if j%2 == 0 and j%4 != 0: k+=1

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.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

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;
  • счетчик всегда нужно сначала обнулять, поэтому следующим оператором будет:

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);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *