Python. Задача 8-43
Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности, находящихся на расстоянии не меньше 10 (разница в индексах элементов должна быть 10 или более). Необходимо определить количество пар, произведение чисел в которых кратно 10.
Научись программировать - курсы по изучению python с нуля с трудоустройством.
Входные данные: Дан входной файл, первой строке входных данных задаётся количество чисел N< (10 ≤ N ≤ 100000). В каждой из последующих N строк записано одно натуральное число, не превышающее 10 000.
Пример входных данных:
12
1
5
5
8
9
4
12
14
6
7
9
8
Пример выходных данных для приведённого выше примера входных данных: 1
Пояснение. Из 12 чисел можно составить 3 пары, удовлетворяющие условию. Это будут элементы с индексами 1 и 11, 1 и 12, 2 и 12. Для заданного набора чисел получаем пары (1, 9), (1, 8), (5, 8). Произведения чисел в этих парах равны 9, 8, 40. На 10 делится одно из этих произведений.
# Расстояние между элементами
K = 10
# Циклически заполняемый буфер
a = [0] * K
# счетчик чисел кратных 2
m2 = 0
# счетчик чисел кратных 5
m5 = 0
# счетчик чисел кратных 10
m10 = 0
# счетчик произведений кратных 10
cnt = 0
f = open('c:\\work\\test-8-41-1.txt')
# Считываем количество чисел
N = int(f.readline())
# Заполняем циклический буфер первыми K элементами
for i in range(K):
a[i] = int(f.readline())
# Для следующих чисел из файла
for i in range(K, N):
# Индекс буфера
idx = i % K
if a[idx] % 10 == 0:
m10 += 1
if a[idx] % 5 == 0:
m5 += 1
if a[idx] % 2 == 0:
m2 += 1
# Считываем очередное число
x = int(f.readline())
if x % 10 == 0:
# Все предыдущие числа, за исключением тех, что в буфере
# будут составлять пары с текущим
cnt += i - K + 1
elif x % 5 == 0:
# Все предыдущие кратные 2 числа будут составлять пары с текущим
cnt += m2
elif x % 2 == 0:
# Все предыдущие кратные 5 числа будут составлять пары с текущим
cnt += m5
else:
# Все предыдущие кратные 10 числа будут составлять пары с текущим
cnt += m10
a[idx] = x
f.close()
print(cnt)