Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C ++ задача на остатки:

Артемий Рубцов Ученик (104), открыт 3 недели назад
Остатки
Даны целые неотрицательные числа a
, b
, c
, d
, при этом 0⩽c<d
. Выведите в порядке возрастания все числа от a
до b
, которые дают остаток c
при делении на d
.

В этой задаче нельзя использовать инструкцию if, должен быть только один цикл.

Входные данные

На вход подаются четыре строки, в каждой из которых написано по одному неотрицательному целому числу — a
, b
, c
, d
. Все числа не превосходят 2⋅10**9
, 0⩽c<d


Выходные данные

Выведите ответ к задаче.


#include <iostream>



using namespace std;

using ll = long long;

int main()

{

ll a, b, now = a, n, c, d;

cin >> a >> b >> c >> d;

now = a + c - a % d;

for (now; now <= b; now += d){

cout << now << " ";

}

return 0;

}

почему то на этой же задаче валится на 3-м тесте
1 ответ
Андрей Высший разум (461022) 3 недели назад
Вот это вот:
 now = a + c - a % d; 
ошибочно.
Оно правильно работает только в том случае, когда c >= a % d.
Но если с < a % d, то now < a и выведется лишнее число.

Можно написать так:
 now = a + (c + d - a % d) % d; 
Батаев ДмитрийПросветленный (22905) 3 недели назад
от a до b значит b > a или это частный случай
Андрей Высший разум (461022) Батаев Дмитрий, В тексте вопроса это не указано, а сам автор вопроса решал задачу исходя из предположения, что a <= b. Обычно, случай, когда надо вывести все числа диапазона, независимо от порядка указания его концов, в учебных задачах обговаривается явно.
Похожие вопросы