Часть 2. Задание 15.2
ОГЭ. Задание 15.1
Проверка знаний и умений в области программирования.
Надо знать:
Структуру языка программирования. Основные элементы структуры, типы данных. При решении задач можно использовать любой я.п. из: Бейсик, Паскаль, С/С++, Питон.
Особенности выбранного я.п. (языка программирования)
Библиотеку служебных слов, функции и процедуры для реализации таких структур, как ветвление, циклы.
Надо уметь:
вводить данные с клавиатуры, выводить данные для чтения (процедуры ввода-вывода).
применять различные структуры я.п. для достижения результата.
Разберем решение Задания 15.2 ОГЭ-2023.
Условие задачи: Напишите программу, которая в последовательности натуральных чисел определяет количество чисел, кратных 4, но не кратных 7. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, кратное 4 и не кратное 7.
Количество чисел не превышает 1000. Введённые числа не превышают 30 000.
Программа должна вывести одно число: количество чисел, кратных 4, но не кратных 7.
входные данные:
4
16
28
26
24
выходные данные:
2
Решение:
Анализ условия задачи: в задаче речь идет о последовательности, следовательно, для ввода чисел необходимо использовать структуру цикл. Так как программа должна в первую очередь получить количество чисел в последовательности, то надо использовать структуру for (во всех перечисленных выше я.п. данная структура есть).
Так как целью является подсчет чисел, которые кратны 4 и не кратны 7, то для отбора чисел, отвечающих условию задачи, надо использовать структуру ветвления if. Данная структура имеется во всех я.п. (перечисленных выше).
Для организации ввода-вывода в каждом я.п. используются свои процедуры и функции.
Ниже приведены решения для четырех я.п.: Паскаль, С/С++, алгоритмический язык и Питон (Бейсик уже практически не используется)
Ответ: 2
Задача 2:
Напишите программу, которая в последовательности натуральных чисел определяет сумму чисел, не превосходящих 16, в записи которых нет цифры 5. Программа получает на вход количество чисел в последовательности, а затем сами числа.
В последовательности всегда имеется число, не превосходящее 16, в записи которого нет цифры 5.
Количество чисел не превышает 1000. Введённые числа не превышают 30 000.
Программа должна вывести одно число: сумму чисел, не превосходящих 16, в записи которых нет цифры 5.
входные данные:
5
15
1
5
13
44
выходные данные:
14
Анализ условия задачи:
В данной задаче необходимо предусмотреть блок, с помощью которого определить: есть ли в числе цифра 5. Стандартный способ реализации может быть в использовании вложенной структуры (цикл-в-цикле). Вложенная структура должна будет "разобрать" число по цифрам и, если встретится цифра 5, досрочно выйти из цикла и не использовать это число для суммы.
Второй способ: введенное число перевести в строку и, используя функции библиотеки, определить входит ли цифра 5 в строку.
Оба способа реализации покажем на я.п. Python.
Python: слева - реализация с помощью вложенных циклов, справа - через преобразование числа в строку и использование функции count() - подсчет символов "5".
В каждом я.п. реализация блока нахождения символа, равного 5, - осуществлена с помощью функций: в я.п. С/С++ : find(); в я.п. PascalABC.net: pos().
Задача 3.
Напишите программу, которая в последовательности натуральных чисел среди двухзначных число определяет наименьшую разность между первой и второй цифрами. Программа получает на вход ряд чисел, заканчивающийся 0. В последовательности всегда имеется двухзначное число. Количество чисел не превышает 200, а введенные числа не превышают 10000. Программа должна вывести одно число: наименьшую разность между первой и второй цифрами среди двухзначных чисел.
входные данные:
17
2
75
1001
45
101
43
0
выходные данные:
-6
Анализ условия задачи.
Так как программа не получает на вход заранее определенное количество чисел, то в этом случае мы должны применять другой организатор ввода чисел. Например, While.
Среди всех чисел, поступающих на вход программе, необходимо рассматривать только двухзначные.
Ну, и... Нам надо определять разность между первой и второй цифрами числа, для этого необходимо применить "блок" выделения цифр из числа. Этот блок может использовать следующие алгоритмы:
преобразовать число в строку и тогда разность можно определить как цел(sl[0]) - цел(sl[1]), где sl - число, преобразованное в строку, а [0] и [1] - это индексы первой и второй цифр (символов).
использовать цикл-в-цикле. Реализация такой структуры уже была показана выше.
так как мы используем двухзначные числа, то выделить первую цифру из числа можно разделив число на 10 с определением целой части, а вторую цифру - разделив число на 10 с определением остатка от деления.
в задаче необходимо предусмотреть переменную, которая будет запоминать разность между цифрами, причем, каждый раз - наименьшую из текущих значений.
Задачи для самостоятельного решения
Задача 4.
Напишите программу, которая в последовательности натуральных чисел определяет наибольшую разность между первой и последней цифрами среди трехзначных чисел. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется трехзначное число. Количество чисел не превышает 200, а введенные числа не превышают 10000. Программа должна вывести одно число: наибольшую разность между первой и последней цифрами среди трехзначных чисел.
входные данные:
7
17
9
705
9001
108
601
82
выходные данные:
5
решение Python
n=int(input())
mx = 0
for x in range(n):
ch = int(input())
if ch>99 and ch<1000:
fs = ch//100
sc = ch%10
mx = max(mx,fs-sc)
print(mx)
решение С/С++
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,ch;
cin>>n;
int mx=0,fs,sc;
for(int i=0;i<n;i++){
cin>>ch;
if(ch>99 && ch<1000){
fs = ch/100;
sc = ch%10;
int d = fs - sc;
mx = max(mx,d);
}
}
cout<<mx<<endl;
return 0;
}
решение PascalABC.net
begin
var n,ch,fs,sc: integer;
readln(n);
var mx:=0;
for var i:=1 to n do
begin
readln(ch);
if (ch>99) and (ch<1000) then
begin
fs:=ch div 100;
sc:=ch mod 10;
var d:=fs-sc;
mx:=max(mx,d);
end;
end;
writeln(mx);
end.
Задача 5
Напишите программу, которая в последовательности целых чисел находит два различных по значению наибольших числа среди чисел, не кратных трем. Программа получает на вход целые числа, количество введенных чисел неизвестно, последовательность чисел заканчивается 0 (0 - признак окончания ввода, не входит в последовательность). В последовательности всегда имеется два различных по значению числа, не кратных трем. Количество чисел не превышает 1000, а введенные числа по модулю не превышают 30000.
Программа должна вывести два числа: два различных по значению наибольших числа среди чисел, не кратных трем.
входные данные:
132
89
47
60
89
90
0
выходные данные:
89 47
решение Python
ch=int(input())
sp=[]
while ch!=0:
if ch%3!=0 and ch not in sp:
sp.append(ch)
ch = int(input())
sp.sort(reverse=True)
print(sp[0],sp[1])
решение С/С++
#include <bits/stdc++.h>
using namespace std;
int main()
{
int ch;
cin>>ch;
int mx1=0,mx2=0;
while(ch!=0){
if(ch%3!=0){
if (ch>mx1){
mx2 = mx1;
mx1 = ch;
}
else{
if(ch!=mx1 && ch>mx2)
mx2 = ch;
}
}
cin>>ch;
}
cout<<mx1<<' '<<mx2<<endl;
return 0;
}
решение PascalABC.net
begin
var ch: integer;
readln(ch);
var mx1:=0;
var mx2:=0;
while ch<>0 do
begin
if (ch mod 3 <>0) then
begin
if ch>mx1 then
begin
mx2:=mx1;
mx1:=ch;
end
else
if (ch<>mx1) and (ch>mx2) then
mx2:=ch;
end;
readln(ch);
end;
writeln(mx1,' ',mx2);
end.
Задача 6
Напишите программу, которая подсчитывает во введённом с клавиатуры натуральном числе количество цифр, не меньших 3. Программа получает на вход целое число, не превышающее 1000000000.
Программа должна вывести одно число - количество цифр, не меньших 3 во введённом числе.
входные данные:
270453
выходные данные:
4
решение Python
n=int(input()) #7
cnt=0
while n>0:
c = n%10
if c>=3:
cnt +=1
n //=10
print(cnt)
решение С/С++
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int cnt = 0;
while(n>0){
int c = n%10;
if (c>=3)
cnt +=1;
n /=10;
}
cout<<cnt<<endl;
return 0;
}
решение PascalABC.net
begin
var n,c: integer;
readln(n);
var cnt:=0;
while n>0 do
begin
c:= n mod 10;
if c>=3 then
cnt +=1;
n := n div 10;
end;
writeln(cnt);
end.
Задача 7.
Напишите программу, которая определяет во введённом с клавиатуры натуральном числе произведение первой и последней цифр.
Программа получает на вход целое число, не превышающее 1000000000.
Программа должна вывести одно число - произведение первой и последней цифр введенного числа.
входные данные:
270453
выходные данные:
6
решение Python
n=int(input()) #7
p=n%10
while n>9:
n //=10
print(p*n)
решение С/С++
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int p = n%10;
while(n>9){
n /=10;
}
cout<<p*n<<endl;
return 0;
}
решение PascalABC.net
begin
var n: integer;
readln(n);
var p:=n mod 10;
while n>9 do
n := n div 10;
writeln(p*n);
end.
Задача 8.
Напишите программу, которая находит значение суммы
Программа получает на вход два натуральных числа х и n. Введенные числа не превышают 10.
Программа должна вывести одно число - значение суммы - с точностью до сотых.
Примечание. n! = 1*2*3*...*n. Например, 4! = 1*2*3*4 = 24.
Пример работы программы:
входные данные
5 7
выходные данные
127.62
решение Python
x=int(input()) #5
n=int(input()) #7
s=0
fact=1
p=1
for i in range(1,n+1):
p *=x
fact *=i
s +=p/fact
print(round(s,2))
решение С/С++
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x,n;
float s=0.0;
int fct=1,p=1;
cin>>x>>n;
for(int i=1;i<n+1;i++){
p *=x;
fct *=i;
s += (float)p/fct;
}
cout<<setprecision(5)<<s<<endl;
return 0;
}
решение PascalABC.net
begin
var x,n: integer;
var s:=0.0;
var p:=1;
var fct:=1;
readln(x,n);
for var i:=1 to n do
begin
p *=x;
fct *=i;
s +=p/fct;
end;
writeln(s:1:2);
end.
Задача 9.
Напишите программу, которая во введенном с клавиатуры натуральном числе определяет наибольшую сумму цифр трёхзначных чисел, образованных тройками соседних цифр числа. Программа получает на вход натуральное число, большее 99 и не превышающее 1 000 000 000.
Программа должна вывести одно число - наибольшую сумму цифр среди чисел, образованных тройками соседних цифр числа.
входные данные:
8509136
выходные данные:
14
Пояснение. В числе 8 509 136 наибольшая сумма цифр трёхзначных чисел ищется среди троек чисел: 850, 509, 091, 913, 136. Наибольшей среди сумм цифр в этих числах является 14 (в числе 509).
решение на 3-х я.п.: PascalABC.net, C/C++ и Python
Задача 10.
Напишите программу, которая в последовательности натуральных чисел определяет сумму двухзначных чисел, в которых младший разряд не менее чем на 3 больше старшего разряда. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется двухзначное число, в котором младший разряд не менее чем на 3 больше старшего разряда. Количество чисел не превышает 200. Введенные числа не превышают 10 000. Программа должна вывести одно число: сумму двухзначных чисел, в которых младший разряд не менее чем на 3 больше старшего разряда.
входные данные:
7
85
17
25
147
38
6
41
выходные данные:
80
решение на 3-х я.п.
Задача 11.
Напишите программу, которая определяет во введенном с клавиатуры натуральном числе сумму первой и наименьшей из цифр числа. Программа получает на вход целое число, не превышающее 1 000 000 000.
Программа должна вывести одно число - сумму первой и наименьшей из цифр введенного числа.
входные данные:
672453
выходные данные:
8