Даны целые неотрицательные числа a, b, c, d, при этом 0≤c<d. Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d.
В этой задаче нельзя использовать инструкцию if, должен быть только один цикл.
Входные данные
На вход подаются четыре строки, в каждой из которых написано по одному неотрицательному целому числу — a, b, c, d. Все числа не превосходят 2∗109, 0≤c<d.
Выходные данные
Выведите ответ на задачу.
Примеры
ввод: 5 5 0 5
вывод: 0
#include <iostream>
using namespace std;
int main() {
int a, b, c, d;
cin >> a >> b >> c >> d;
a=a-c;
b=b-c;
int v=a+d-1;
a=v/d*d;
for (int i = a; i <= b; i += d){
cout << i << " ";}
return 0;
}
C/C++
Задача на С++ Остатки, помогите пожалуйста понять, что не так.
что-то не въехал в математику.
предлагаю так:
a/=d;// частное от деления
a*=d;// a без остатка
a+=c;// a с остатком
дальше цикл.
Нюанс - в условии не написано, что a<=b, надо это обеспечить.
Вопрос: почему в примере "вывод: 0"?
предлагаю так:
a/=d;// частное от деления
a*=d;// a без остатка
a+=c;// a с остатком
дальше цикл.
Нюанс - в условии не написано, что a<=b, надо это обеспечить.
Вопрос: почему в примере "вывод: 0"?
У тебя 2 варианта:
a % d <= c - в этом случае надо начинать цикл со значения (a / d) * d + c
a % d > c - в этом случае надо начинать цикл со значения (a / d + 1) * d + c
Код:
cin >> a >> b >> c >> d;
for (int i = (a / d + (a % d > c)) * d + c; i <= b; i += d) { cout << i << ' '; }
a % d <= c - в этом случае надо начинать цикл со значения (a / d) * d + c
a % d > c - в этом случае надо начинать цикл со значения (a / d + 1) * d + c
Код:
cin >> a >> b >> c >> d;
for (int i = (a / d + (a % d > c)) * d + c; i <= b; i += d) { cout << i << ' '; }
Мне известен один способ разместить границы диапазона в переменных a и b так, чтобы значение переменной a гарантированно стало меньше или равным значению переменной b.
Правда, этот способ использует промежуточный массив из двух элементов для того, чтобы можно было обращаться к каждому элементу по его индексу.
Для краткости обозначу этот массив так: int t[2];
Ввод будет таким: вместо cin >> a >> b >> c >> d; станет cin >> t[0] >> t[1] >> c >> d;
А теперь главное!
a = t[ t[0] > t[1] ];
b = t[ t[0] < t[1] ];
И НИКАКИХ IF
Правда, этот способ использует промежуточный массив из двух элементов для того, чтобы можно было обращаться к каждому элементу по его индексу.
Для краткости обозначу этот массив так: int t[2];
Ввод будет таким: вместо cin >> a >> b >> c >> d; станет cin >> t[0] >> t[1] >> c >> d;
А теперь главное!
a = t[ t[0] > t[1] ];
b = t[ t[0] < t[1] ];
И НИКАКИХ IF
Похожие вопросы
- Задача на C++ (Остатки).
- Создать простой класс, конструктор, и несколько функций. Не могу решить задачу, плохо понял тему, помогите пожалуйста.
- Помогите пожалуйста с задачей на c++, если кто-нибудь захочет помочь.
- Помогите пожалуйста решить задачу на языке С#.
- Помогите пожалуйста составить задачу на программе С++
- Помогите пожалуйста решить задачу по с++
- Помогите пожалуйста решить задачу на Си
- Помогите пожалуйста с задачей по С++
- Помогите, пожалуйста, написать программу по нижеописанной задаче!
- Помогите, пожалуйста, задачу решить, времени не хватает, буду благодарен
Оказывается, задача с Сириуса!
Но, по-моему, у тех, кто составлял эту задачу, не все дома... То есть не всё в порядке с логикой.
Я умываю руки. Ищите правильный (хм!!!) ответ на КиберФоруме.