код выдает неверный ответ
решала задачу:
Подсчитайте количество способов представить натуральное число n в виде суммы двух различных натуральных чисел, каждое из которых не превышает k и первое число меньше второго.
примеры
Ввод
3 5
Вывод
1
Ввод
2 4
Вывод
0
5 6
Вывод
2
Написала по ней код, но тестирующая система пишет, что он выдает неверный ответ на четвертом тесте. Мой код:
n, k=map(int, input().split())
ans=0
for i in range(1, n//2+1):
if i<n-i and n-i<=k:
ans+=1
print(ans)
Конечно, на приведенных выше тестах все работает хорошо, но я не знаю, что еще исправить.
Ответы (2 шт):
Число 2 не логично составлять из чисел меньших 4-х (хотя и возможно)
Ваш вариант можно было бы записать короче с использованием дополнительно переменной:
def test(n, k):
counter=0
delta = 1 if n%2 == 0 else 0
for i in range(n//2-delta):
if i<n-i and n-i<=k:
counter+=1
print(counter)
Теперь с условием сказанного в начале перепишем Ваш вариант так, он дает те же ответы:
def test2(k, n):
counter = 0
for i in range(n//2+1):
a = i
b = n - i
if (a < b and b <= k):
counter +=1
print(counter)
test(3, 5) # 2,3 = 1 test(2, 4) # 2,2 = 0 (числа не могут быть равными) test(5, 6) # 1,5;2,5 = 2
Простая функция, дающая верные результаты:
def tst(n, k):
counter = 0
for lo in range(1, (n+1)//2):
hi = n - lo
if hi <= k:
counter += 1
return counter
Оптимизированная:
def sum_distinct(n, k):
return max(0, min(n - 1, k) - (n-(n-1)//2) + 1)
Откуда что взялось:
меньшее слагаемое находится в диапазоне 1..lo=(n-1)//2
большее - в диапазоне n-lo..n-1
применив к верхней границе ограничение k, получаем количество вариантов сумм