Часть 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.

Среди всех чисел, поступающих на вход программе, необходимо рассматривать только двухзначные.

Ну, и... Нам надо определять разность между первой  и второй цифрами числа, для этого необходимо применить "блок" выделения цифр из числа. Этот блок может использовать следующие алгоритмы:

в задаче необходимо предусмотреть переменную, которая будет запоминать разность между цифрами, причем, каждый раз - наименьшую из текущих значений.

Задачи для самостоятельного решения

Задача 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

решение на 3-х я.п.