Задача Задача №3586856
А
А
Ниже подробное решение задачи и пример реализации на Python.
Цель задачи
- Среди заданных чисел найти те, у которых в их восьмеричном представлении наибольшее количество цифр 7.
- Среди таких чисел выбрать наименьшее по значению число и вернуть его порядковый номер (позицию) в последовательности (нумерация начинается с 1).
Пояснение по шагам
- Для каждого числа вычисляем количество цифр 7 в его восьмеричном представлении.
- Преобразование в восьмеричное можно сделать через oct(n) и взять строковую часть без префикса '0o'.
- Считаем, сколько символов '7' встречается в этой строке.
- В процессе обхода массива чисел следим за:
- current_max – текущее наибольшее количество 7 в октальном представлении.
- best_value – минимальное число среди тех, что имеют current_max 7.
- best_index – индекс (позицию) этого минимального числа.
- При каждом числе:
- Если its count of 7 > current_max, обновляем current_max, best_value, best_index.
- Если its count == current_max и число меньше best_value, обновляем best_value и best_index (чтобы выбрать минимальное число).
- Если число равно по значению существующему лучшему, можно оставить текущий индекс (это не влияет на требование выбрать минимальное число).
- В конце выводим best_index.
Сложность
- Пусть n — количество чисел. Дополнительная работа пропорциональна суммарной длине восьмеричных представлений чисел. В целом временем O(n * d), где d — средняя длина октального представления, что для типичных входных данных очень разумно.
Пример реализации (Python)
import sys
def count_sevens_in_octal(n: int) -> int:
# oct(n) возвращает строку вроде '0o123'; берем без префика '0o'
return str(oct(n))[2:].count('7')
def main():
data = list(map(int, sys.stdin.read().strip().split()))
if not data:
return
m = data[0]
arr = data[1:1 + m]
best_count = -1
best_value = None
best_index = -1
for idx, x in enumerate(arr, start=1):
c = count_sevens_in_octal(x)
if c > best_count:
best_count = c
best_value = x
best_index = idx
elif c == best_count:
if best_value is None or x < best_value:
best_value = x
best_index = idx
print(best_index)
if __name__ == "__main__":
main()
Пример теста
- Вход: 5 7 8 63 55 14
- Объяснение:
- 7 в octal = 7, количество 7 = 1
- 8 в octal = 10, количество 7 = 0
- 63 в octal = 77, количество 7 = 2
- 55 в octal = 67, количество 7 = 1
- 14 в octal = 16, количество 7 = 0 Максимальное количество 7 равно 2 и достигается числом 63 (единственное такое число). Его индекс — 3.
- Вывод: 3
Если хотите, могу адаптировать решение под другой язык программирования или привести более сложный пример.