Дана последовательность натуральных чисел. Назовём парой любые два числа из последовательности. Необходимо определить количество пар, в которых десятичная запись произведения чисел в паре заканчивается ровно на
Входные данные.
Первая строка входного файла содержит целое число N — общее количество чисел в наборе. Каждая из следующих
Вам даны два входных файла
Ответ:
Приведём решение пункта А на языке Python.
f = open('27-A.txt')
s = f.readlines()
count = 0
for i in range(1, len(s)-1):
for j in range(i+1, len(s)):
if (int(s[i]) * int(s[j])) % 1000000 == 0 and i != j and (int(s[i]) * int(s[j])) % 10000000 != 0:
count += 1
print(count)
Ответ: 89 35773558.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём другое решение на языке Python.
o=open('27-B.txt')
o.readline()
# Создадим двумерный массив. Первый индекс будет
# количество двоек, второй - количество пятёрок.
# В ячейках массива будет храниться количество таких чисел.
# Сначала заполним этот массив нулями.
arr=[ [0 for j in range(13) ] for i in range(30) ]
for n in o :
n=int(n)
power_of_2 = 0
while n%2==0:
power_of_2 += 1
n=n//2
power_of_5 = 0
while n%5==0:
power_of_5 += 1
n=n//5
arr[power_of_2][power_of_5]+=1
count=0
# Обходим все возможные комбинации количества двоек и пятёрок
for i in range(30):
for j in range(13):
for k in range(30):
for l in range(13):
# Произведение оканчивается на 6 нулей, если
# совокупное количество двоек в обоих числах пары
# больше или равно 6, так же и пятёрок, при этом
# хотя бы одно из них в точности равно 6
# (иначе нулей будет больше шести)
if (i+k>=6 and j+l>=6) and (i+k==6 or j+l==6):
# Увеличиваем счётчик. Впоследствии разделим
# его на 2, т. к. порядок чисел в паре не
# имеет значения.
count += arr[i][j] * arr[k][l]
if i==k and j==l:
# В этом случае в зачёт попадут пары
# из одинаковых чисел. Нужно их исключить.
count -= arr[i][j]
# Хоть такие комбинации i, j, k и l мы
# обойдём по одному разу, деление на 2
# всё равно потребуется. (См. формулу
# количества сочетаний из n по k.)
print(count // 2)
Приведём решение Романа Натробина на языке Python.
f = open('27-B.txt')
mat = [[0 for i in range(8)] for j in range(8)]
ans = 0
f.readline()
for i in f:
m, n = 0, 0
x = int(i)
for p in range(7, -1, -1):
if x % (2**p) == 0:
m = p
break
for p in range(7, -1, -1):
if x % (5**p) == 0:
n = p
break
mat[m][n] += 1
for i in range(3):
ans += mat[i][7] * mat[6 - i][7]
ans += mat[7][i] * mat[7][6 - i]
ans += mat[7][3] * (mat[7][3] - 1) // 2
ans += mat[3][7] * (mat[3][7] - 1) // 2
for i in range(7):
for j in range(7):
for k in range(6 - j, 8):
if i != 6 - i or j != k:
ans += (mat[i][j] * mat[6 - i][k])
else:
ans += (mat[i][j] - 1) * mat[i][j] // 2
for k in range(7 - i, 8):
if i != k or j != 6 - j:
ans += (mat[i][j] * mat[k][6 - j])
else:
ans += (mat[i][j] - 1) * mat[i][j] // 2
mat[i][j] = 0
print(ans)

