К содержанию

Подтема 3 из 6

Повторы в строке

Как узнать, сколько раз встречается каждое число строки, и проверить условие о повторах.

Частота

Первая проверка задачи темы: в каких строках учебной таблицы одно число повторяется дважды, а остальные четыре различны?

Повторы описывают частотой — сколько раз значение встречается в строке. В строке 2, 2, 5, 5, 5, 9 значение 2 встречается два раза, 5 — три раза, 9 — один раз. «Число встречается дважды» означает два появления всего, включая первое.

Неповторяющиеся числа — с частотой 1: здесь только 9. Повторяющиеся — с частотой больше 1: 2, 2, 5, 5, 5. А различные значения — каждое по одному разу: 2, 5 и 9. «Различные» и «неповторяющиеся» — не одно и то же.

Структура повторов

Условие о повторах задаёт размеры групп одинаковых чисел — их сумма всегда равна длине строки. В строке 4, 4, 4, 7, 7, 2, 9 три четвёрки, две семёрки, одна двойка и одна девятка: структура 3 + 2 + 1 + 1 = 7. Сами значения для структуры не важны:

Одинаковые значения соединены скобкой, под каждой ячейкой — сколько раз встречается её значение. У обеих строк группы размеров 3, 2, 1, 1: структура 3 + 2 + 1 + 1, хотя числа разные.

Задача темы требует структуру 2 + 1 + 1 + 1 + 1: одна пара и четыре одиночных числа. Выбери требование, чтобы увидеть его структуру:

все шесть чисел различны
1 + 1 + 1 + 1 + 1 + 1
в шести числах одна пара, остальные различны
2 + 1 + 1 + 1 + 1
в шести числах две пары, остальные различны
2 + 2 + 1 + 1
в шести числах одна тройка, остальные различны
3 + 1 + 1 + 1
в семи числах одна тройка и одна пара
3 + 2 + 1 + 1
в семи числах одна четвёрка, остальные различны
4 + 1 + 1 + 1
Тонкости:числа различных значений мало

Проверка «в строке пять различных значений» не отличает одну тройку от двух пар:

В обеих строках семь элементов и пять различных значений, но у первой одна тройка — 3 + 1 + 1 + 1 + 1, а у второй две пары — 2 + 2 + 1 + 1 + 1.

Число различных значений решает только два случая: если их столько же, сколько чисел, повторов нет; если на одно меньше — ровно одна пара.

Полоса частот

Под каждым числом строки ставят его частоту — получается полоса частот. Структуру проверяют, считая в полосе нужные частоты. У строки 2, 2, 5, 5, 5, 9 полоса 2, 2, 3, 3, 3, 1. Значение с частотой k занимает k ячеек, поэтому одна пара — это две двойки в полосе, а «одна пара и четыре одиночных» — две двойки и четыре единицы.

Таблица

считает ячейки диапазона, равные значению: =СЧЁТЕСЛИ($A1:$F1;A1) — сколько раз в строке встречается число из A1. Формулу копируют вправо до L1 и вниз: знак $ закрепляет исходные столбцы A–F, а A1 становится B1, C1 и так далее. Так получается в G:L:

G1=СЧЁТЕСЛИ($A1:$F1;A1)
M1=И(СЧЁТЕСЛИ(G1:L1;2)=2;СЧЁТЕСЛИ(G1:L1;1)=4)
M1=И(СЧЁТЕСЛИ(G1:L1;2)=2;СЧЁТЕСЛИ(G1:L1;1)=4)
ABCDEFGHIJKLM
12257911221111ИСТИНА
2551379221111ИСТИНА
32255911222211ЛОЖЬ
42227911333111ЛОЖЬ
5334578221111ИСТИНА
67720222426221111ИСТИНА
Формулы в ячейках
  • G1скопирована до L6=СЧЁТЕСЛИ($A1:$F1;A1)
  • M1скопирована до M6=И(СЧЁТЕСЛИ(G1:L1;2)=2;СЧЁТЕСЛИ(G1:L1;1)=4)

Перепечатай одну из пятёрок третьей строки на 4 — вторая пара исчезнет, и проверка даст ИСТИНА. Выбери требование, чтобы увидеть проверку по полосе:

все числа различны
=МАКС(G1:L1)=1
есть повторяющееся число
=МАКС(G1:L1)>1
одна пара и четыре одиночных
=И(СЧЁТЕСЛИ(G1:L1;2)=2;СЧЁТЕСЛИ(G1:L1;1)=4)
две пары и два одиночных
=И(СЧЁТЕСЛИ(G1:L1;2)=4;СЧЁТЕСЛИ(G1:L1;1)=2)
одна тройка и три одиночных
=И(СЧЁТЕСЛИ(G1:L1;3)=3;СЧЁТЕСЛИ(G1:L1;1)=3)
Python

— сколько раз x встречается в списке a. Включение собирает частоту каждого элемента — ту же полосу, что в таблице, — а count полосы считает в ней двойки и единицы:

a = [2, 2, 5, 5, 5, 9]frequencies = [a.count(x) for x in a]print(frequencies)print(frequencies.count(2), frequencies.count(1))
[2, 2, 3, 3, 3, 1] 2 1
with open("9.txt") as f:    for line in f:        a = [int(part) for part in line.split()]        frequencies = [a.count(x) for x in a]        pair = frequencies.count(2) == 2        print(frequencies, pair and frequencies.count(1) == 4)
[2, 2, 1, 1, 1, 1] True [2, 2, 1, 1, 1, 1] True [2, 2, 2, 2, 1, 1] False [3, 3, 3, 1, 1, 1] False [2, 2, 1, 1, 1, 1] True [2, 2, 1, 1, 1, 1] True

Структура задачи темы — у строк 1, 2, 5 и 6. Третья не подходит из-за второй пары, четвёртая — из-за тройки двоек.

Все числа различны

«Все числа различны» — в полосе одни единицы; в Python строки такой же длины, как сама строка. Множество хранит каждое значение один раз: для 2, 2, 5, 5, 5, 9 это 2, 5 и 9. Если множество короче строки, в ней есть повторы.

Частоту одного конкретного значения проверяют напрямую: «наибольшее число встречается один раз» — частота максимума равна 1.

Таблица
=МАКС(G1:L1)=1
=СЧЁТЕСЛИ(A1:F1;МАКС(A1:F1))=1
Python
a = [2, 2, 5, 5, 5, 9]print(len(set(a)), len(a), len(set(a)) == len(a))print(a.count(max(a)) == 1)
3 6 False True
Тонкости:Counter

из модуля collections хранит частоту каждого различного значения. Отсортированный набор частот и есть структура повторов, записанная по возрастанию: 3 + 2 + 1 + 1 — это [1, 1, 2, 3].

from collections import Countera = [4, 4, 4, 7, 7, 2, 9]print(Counter(a)[4], sorted(Counter(a).values()))
3 [1, 1, 2, 3]

Итого

  • Частотасколько раз встречается значение; «дважды» — два раза
  • Структураразмеры групп; их сумма — длина строки
  • Полоса=СЧЁТЕСЛИ($A1:$F1;A1), [a.count(x) for x in a]
  • Пара и четырев полосе две двойки и четыре единицы
  • Все различны=МАКС(G1:L1)=1, len(set(a)) == len(a)

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1
Запиши полосу частот строки 4, 4, 7, 9, 9, 9 — частоту под каждым числом.
ОтветСкрыть ответ
Ответ
2, 2, 1, 3, 3, 3.
Вопрос 2
Какая структура повторов у строки 1, 1, 6, 6, 6, 6, 3?
ОтветСкрыть ответ
Ответ
4 + 2 + 1: четыре шестёрки, две единицы и одна тройка.
Вопрос 3
В строке шесть чисел: одно встречается трижды, остальные различны. Сколько в полосе частот троек и сколько единиц?
ОтветСкрыть ответ
Ответ
Три тройки и три единицы.
Вопрос 4
В строке из семи чисел пять различных значений. Значит ли это, что одно число встречается трижды?
ОтветСкрыть ответ
Ответ
Нет: два «лишних» появления дают и одна тройка (3 + 1 + 1 + 1 + 1), и две пары (2 + 2 + 1 + 1 + 1).
Вопрос 5
Что напечатает print(len(set([3, 1, 3, 1, 2])))?
ОтветСкрыть ответ
Ответ
3: различных значений три — 1, 2 и 3.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Значения и появления

Дана строка 4, 4, 7, 9, 9, 9. Чему равна сумма повторяющихся чисел с учётом всех появлений?

Введите число.

Структура 3 + 2 + 1 + 1

В каждой строке таблицы 9-4.xlsx, 9-4.txt записаны семь натуральных чисел. Определи количество строк, в которых одно число встречается трижды, другое — дважды, а остальные два числа различны.

9-4.xlsxТаблица чисел — Excel-файл, как на экзаменеExcel · 32,6 КБ9-4.txtТа же таблица текстом: строка файла — строка таблицы, числа через пробелТекстовый файл · 19,9 КБ

Введите число.

Все числа различны

В каждой строке таблицы 9-2.xlsx, 9-2.txt записаны пять натуральных чисел. Определи количество строк, в которых все числа различны, а удвоенная сумма наибольшего и наименьшего чисел не больше суммы трёх остальных.

9-2.xlsxТаблица чисел — Excel-файл, как на экзаменеExcel · 27,7 КБ9-2.txtТа же таблица текстом: строка файла — строка таблицы, числа через пробелТекстовый файл · 16,9 КБ

Введите число.

Наибольшее число — один раз

В каждой строке таблицы 9-3.xlsx, 9-3.txt записаны шесть натуральных чисел. Определи количество строк, в которых есть повторяющиеся числа, а наибольшее число строки встречается в ней ровно один раз.

9-3.xlsxТаблица чисел — Excel-файл, как на экзаменеExcel · 29,2 КБ9-3.txtТа же таблица текстом: строка файла — строка таблицы, числа через пробелТекстовый файл · 17,1 КБ

Введите число.