Даны числа a, b, c, d, при этом 0≤c
Нельзя использовать if и операторы сравнения (< и т.д.), должен быть только один цикл for.
Пример входных данных: 1 4 1 2, Выходные данные: 1 3
Пример входных данных: 1 5 0 4, Выходные данные: 4
Моя попытка
a = int(input()) # 1
b = int(input()) # 5
c = int(input()) # 0
d = int(input()) # 4
for i in range(a + ((a % d != c) * (d-c)), b, d):
print(i, end=' ')
Т.е. я к первому числу последовательности прибавлял некоторое число (пробовал d - c), умноженное на логическое выражение a % d != c (т.е. я проверял, подходит ли первое число последовательности и если оно подходило, то ничего не прибавлял, если не подходило то прибавлял), далее просто проходился от a до b с шагом d
Но такое решение не проходит проверку уже на втором тесте (1 5 0 4)
Ответы (4 шт):
Добавил разветвление для 2 вариантов, если с = 0 и если с != 0, теперь вроде бы работает
a = int(input())
b = int(input())
c = int(input())
d = int(input())
for i in range(a + (a % d != c) * ((c == 0) * (d-c-1) + (c != 0) * (d - c)), b, d):
print(i, end=' ')
В вопросе не приведено точное условие: входят ли сами a и b в диапазон? Я посчитал, что входят.
Округляем a - c вверх до числа. кратного d и добавляем c, чтобы остаток по модулю d был равен этому значению.
a,b,c,d = 1,5,0,4
for i in range(c + (a - c + d - 1) // d * d, b + 1, d):
print(i)
Сначала найдем число больше либо равное а, которое дает нужный остаток. Далее вывести числа с шагом.
a=a+(d-a%d+c) %d
for i in range(a, b+1,d):
print(i)
Объяснение магической формулы. Сколько не хватает до d? d-a%d. Добавим нужный остаток. Если получится d то a это первое нужное число.
a, b, c, d = int(input()), int(input()), int(input()), int(input())
a = ((a + d - c - 1) // d) * d + c
for i in range(a, b + 1, d):
print(i)
работает отвечаю