Статья Автор: Деникина Н.В., Деникин А.В.

Обработка последовательности чисел - 2

Задание 16 ОГЭ

Экстремумы и проверки: max, min, YES/NO

Максимум, минимум, среднее арифметическое, ∃ существование

 

Поиск характеристик

Максимум

Условие

Напишите программу, которая в последовательности натуральных чисел определяет максимальное число, кратное 3. Гарантируется, что хотя бы одно число кратно 3. Программа должна вывести одно число — максимальное кратное 3.

mx = -1 → если число подходит и a > mx → обновляем mx = a.

Python · for
Python · while
Python · while True
C++
КуМир
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
n = int(input())
mx = -1
for i in range(n):
    a = int(input())
    if a % 3 == 0:
        if a > mx:
            mx = a
print(mx)
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
a = int(input())
mx = -1
while a != 0:
    if a % 3 == 0:
        if a > mx:
            mx = a
    a = int(input())
print(mx)
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
mx = -1
while True:
    a = int(input())
    if a == 0:
        break
    if a % 3 == 0:
        if a > mx:
            mx = a
print(mx)
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
#include <iostream>
using namespace std;
int main() {
    int n, a, mx = -1;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a;
        if (a % 3 == 0 && a > mx) mx = a;
    }
    cout << mx << endl;
}
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
алг
нач
  цел n, a, mx, i
  ввод n
  mx := -1
  нц для i от 1 до n
    ввод a
    если mod(a, 3) = 0 и a > mx то
      mx := a
    все
  кц
  вывод mx
кон

Минимум

Условие

Напишите программу, которая в последовательности натуральных чисел определяет минимальное число, кратное 3. Формат ввода — аналогичный. Программа должна вывести одно число — минимальное кратное 3.

mn = 999999 → если подходит и a < mnmn = a.

Среднее арифметическое

Условие

Напишите программу, которая в последовательности натуральных чисел определяет среднее арифметическое чётных чисел. Если чётных чисел нет, программа должна напечатать «NO». Иначе — среднее арифметическое с точностью до 2 знаков после запятой.

Нужны две переменные: s = 0 и cnt = 0. В конце: s / cnt.

Python · for
Python · while
Python · while True
C++
КуМир
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
n = int(input())
s = 0
cnt = 0
for i in range(n):
    a = int(input())
    if a % 2 == 0:
        s += a
        cnt += 1
if cnt > 0:
    print("{{:.2f}}".format(s / cnt))
else:
    print("NO")
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
a = int(input())
s = 0
cnt = 0
while a != 0:
    if a % 2 == 0:
        s += a
        cnt += 1
    a = int(input())
if cnt > 0:
    print("{{:.2f}}".format(s / cnt))
else:
    print("NO")
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
s = 0
cnt = 0
while True:
    a = int(input())
    if a == 0:
        break
    if a % 2 == 0:
        s += a
        cnt += 1
if cnt > 0:
    print("{{:.2f}}".format(s / cnt))
else:
    print("NO")
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
    int n, a, s = 0, cnt = 0;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a;
        if (a % 2 == 0) { s += a; cnt++; }
    }
    if (cnt > 0)
        cout << fixed << setprecision(2)
             << (double)s / cnt << endl;
    else cout << "NO" << endl;
}
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
алг
нач
  цел n, a, s, cnt, i
  ввод n
  s := 0; cnt := 0
  нц для i от 1 до n
    ввод a
    если mod(a, 2) = 0 то
      s := s + a
      cnt := cnt + 1
    все
  кц
  если cnt > 0 то
    вывод вещ(s) / вещ(cnt)
  иначе
    вывод "NO"
  все
кон

Проверка существования (YES / NO)

Условие

Напишите программу, которая определяет, есть ли в последовательности натуральных чисел хотя бы одно нечётное число, большее 100. Программа должна напечатать «YES», если такое число есть, или «NO» в противном случае.

Флаг found = False. Если хоть одно число подходит — found = True.

Python · for
Python · while
Python · while True
C++
КуМир
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
n = int(input())
found = False
for i in range(n):
    a = int(input())
    if a % 2 == 1 and a > 100:
        found = True
print("YES" if found else "NO")
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
a = int(input())
found = False
while a != 0:
    if a % 2 == 1 and a > 100:
        found = True
    a = int(input())
print("YES" if found else "NO")
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
found = False
while True:
    a = int(input())
    if a == 0:
        break
    if a % 2 == 1 and a > 100:
        found = True
print("YES" if found else "NO")
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
#include <iostream>
using namespace std;
int main() {
    int n, a;
    bool found = false;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a;
        if (a % 2 == 1 && a > 100) found = true;
    }
    cout << (found ? "YES" : "NO") << endl;
}
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
алг
нач
  цел n, a, f, i
  ввод n
  f := 0
  нц для i от 1 до n
    ввод a
    если mod(a, 2) = 1 и a > 100 то
      f := 1
    все
  кц
  если f = 1 то
    вывод "YES"
  иначе
    вывод "NO"
  все
кон
Среднее требует деления, а делить на 0 нельзя. Всегда проверяй if cnt > 0 перед делением!

Проверь себя

Выбери правильный ответ. При ошибке покажем объяснение.

ОЧКИ: 0 / 0
 
 
 
 
 

Шпаргалка

Операция Начальное значение Обновление
Максимум mx = -1 if a > mx: mx = a
Минимум mn = 999999 if a < mn: mn = a
Среднее s=0, cnt=0 s+=a; cnt+=1
∃ YES/NO found = False found = True
Печать