На вход программы поступает последовательность из N целых положительных чисел, необходимо определить количество пар двух элементов последовательности с различными номерами, произведение которых даёт число кратное 18.
Входные данные: Дан входной файл, который содержит в первой строке количество чисел N (1 N
100000). В каждой из последующих N строк записано одно натуральное число, не превышающее 1000.
Пример организации исходных данных во входном файле:
4
2
8
9
27
Пример выходных данных для приведённого выше примера входных данных: 4 (это пары: 2,9; 2,27; 8,9; 8,27)
В ответе укажите два числа через пробел: сначала значение для файла А, затем для файла B.
Для А
s = open(’27-8a.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
arr.append(int(s[i]))
n = len(arr)
cnt = 0
for i in range(n - 1):
for j in range(i + 1, n):
if (arr[i]*arr[j]) % 18 == 0:
cnt += 1
print(cnt)
Для Б статика
f = open(’1.txt’)
n = int(f.readline())
ans = 0
k18 = 0
k9 = 0
k6 = 0
k3 = 0
k2 = 0
nk = 0
for i in range(n):
x = int(f.readline())
if x % 18 == 0:
ans += (k18 + nk + k9 + k6 + k3 + k2)
k18 += 1
elif x % 9 == 0:
ans += (k18 + k2 + k6)
k9 += 1
elif x % 6 == 0:
ans += (k18 + k3 + k9 + k6)
k6 += 1
elif x % 3 == 0:
ans += (k18 + k6)
k3 += 1
elif x % 2 == 0:
ans += (k18 + k9)
k2 += 1
else:
ans += k18
nk += 1
print(ans)
Для Б динаминка
with open(’27-8b.txt’) as f:
n = int(f.readline())
count = 0
D = 18 # наш делитель
k = [0]*D#массив,в котором каждый элемент- это количество чисел с определенном остатком от D
for i in range(n):
x = int(f.readline())
for d in range(D):# проходимся по нашим остаткам
if (x*d) % 18 == 0:
count += k[d]#прибавляем к счетчику значение в списке k под индексом остатка
k[x % D] += 1# увеличиваем определенное значение в списке,в зависимости от того,чему равен остаток x от D
print(count)