Помогите разобраться с отступом в массиве
Условие задачи:
На вход программы поступает последовательность из N натуральных чисел (8 ≤ N ≤ 1000). Необходимо определить количество пар (ai и bj, i < j) элементов таких, что их произведение оканчивается на 1, и между ними находится не менее 4 чисел.
Описание входных и выходных данных
В первой строке входных данных задается количество чисел N. В каждой из последующих N строк записано одно натуральное число, не превосходящее 10000. В качестве ответа программа долж-на вывести одно число, количество пар элементов, удовлетворяющих условию.
Пример входных данных:
10
12
81
2
7
33
99
21
11
121
10
Пример выходных данных для приведенного выше примера входных данных:
3
Моя реализация на python:
n = int(input())
count = 0
arr = []
for i in range(n):
arr.append(int(input()))
for i in range(0, n - 4):
for j in range(0, i + 4):
if (arr[i] * arr[j]) % 10 == 1:
count += 1
print(count)
Вопрос:
В условии задачи написано, что расстояние должно быть не менее чем 4, в циклах я указывал n - 4 и n + 4 соответственно, но почему-то программа выдёт результат 4 а не 3 как должно быть. Почему так происходит?
Ответы (2 шт):
Правильно будет так:
for i in range(n):
for j in range(i + 4, n):
if (arr[i] * arr[j]) % 10 == 1:
count += 1
Вместо вашего
for i in range(0, n - 4):
for j in range(0, i + 4):
примените
for i in range(0, n - 5):
for j in range(i + 5, n):
Результат для значений в вашем примере
3
Объяснение:
...между ними находится не менее 4 чисел
значит, что отступов должно быт по меньшей мере 5, и
... (ai и bj, i < j) ...
вместе с предыдущим ограничением значит, что внутренний цикл (для j) нужен начинаться не с 0, а с i + 5.