Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/104: Рейтинг темы: голосов - 104, средняя оценка - 4.68
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7

Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d

13.03.2021, 19:45. Показов 21958. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Остатки
Даны целые неотрицательные числа a, b, c, d, при этом 0≤c<d. Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d.

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

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

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

Мой начальный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream> 
using namespace std;
int main()
{
long a,b,c,d, a1, b1, d1;
cin >> a >> b >> c >> d;
a1 = a-c; b1= b-c;
long long x = (a+d-1)/(d*d);
for(; a1 <= b1; a1++)
{
  cout << x;
}
return 0;
}
Помогите, не могу никак понять как сделать это без операторов сравнения.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2021, 19:45
Ответы с готовыми решениями:

Вывести в порядке возрастания все числа от a до b, которые дают остаток c при делении на d
Остатки Даны целые неотрицательные числа a, b, c, d, при этом 0≤c&lt;d. Выведите в порядке возрастания все числа от a до b, которые дают...

На промежутке от 1 до N найти все числа, которые при делении на a дают остаток b , а при делении на b дают в остатке a
2. Ввести два натуральных числа a и b , на промежутке от 1 до N найти все числа, которые при делении на a дают остаток b , а при...

Найти все числа, которые при делении на a дают остаток b, а при делении на b дают в остатке a
Ввести два натуральных числа a и b, на промежутке от 1 до N найти все числа, которые при делении на a дают остаток b, а при делении на b...

18
Злостный нарушитель
 Аватар для Verevkin
10304 / 5726 / 1269
Регистрация: 12.03.2015
Сообщений: 26,525
13.03.2021, 20:09
Цитата Сообщение от RealmitS1 Посмотреть сообщение
не могу никак понять как сделать это без операторов сравнения.
Тернарный оператор можно юзать?
0
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7
13.03.2021, 20:10  [ТС]
Тернарные операторы использовать нельзя, пробовал.
0
Злостный нарушитель
 Аватар для Verevkin
10304 / 5726 / 1269
Регистрация: 12.03.2015
Сообщений: 26,525
13.03.2021, 20:41
Лучший ответ Сообщение было отмечено RealmitS1 как решение

Решение

Цитата Сообщение от RealmitS1 Посмотреть сообщение
Тернарные операторы использовать нельзя, пробовал.
Где вы все берёте такие задачи для маньяков, а?



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cstdio>
#include <cassert>
 
unsigned foo(unsigned a, unsigned b, unsigned c, unsigned d)
{
  assert(c < d);
  if (a > b) return foo(b, a, c, d);
  
  unsigned count = 0;
  char buf[32];
  
  for (; a <= b; a++)
  {
    bool condition = a % d == c;
    count += condition;
    sprintf(buf, "%c %u\n", 32 * condition, a);
    printf("%s", buf);
  }
  
  return count;
}
 
/* Даны целые неотрицательные числа a, b, c, d, при этом 0≤c<d. 
  Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d.
  В этой задаче нельзя использовать инструкцию if, должен быть только один цикл.  */
 
int main()
{
  printf("\n Всего найдено: %u\n", foo(1, 150, 7, 13));
  return 0;
}
1
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7
13.03.2021, 20:45  [ТС]
Спасибо, что помогаете, но боюсь тут уже вообще все бессильно.
"Программа не соответствует требованиям:
в коде программы используются условный оператор if и массив, что запрещено условиями задачи".
0
Злостный нарушитель
 Аватар для Verevkin
10304 / 5726 / 1269
Регистрация: 12.03.2015
Сообщений: 26,525
13.03.2021, 20:47
Цитата Сообщение от RealmitS1 Посмотреть сообщение
Программа не соответствует требованиям:
в коде программы используются условный оператор if и массив, что запрещено условиями задачи
ЧЗХ? Где в условии запрещено использовать массив?
0
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7
13.03.2021, 20:49  [ТС]
Вот такие веселые задачи, сами сидим группой уже пятый час.
0
Злостный нарушитель
 Аватар для Verevkin
10304 / 5726 / 1269
Регистрация: 12.03.2015
Сообщений: 26,525
13.03.2021, 20:52
Цитата Сообщение от RealmitS1 Посмотреть сообщение
Вот такие веселые задачи, сами сидим группой уже пятый час.
Где в условии запрещено использовать массив?
0
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7
13.03.2021, 20:54  [ТС]
Нет такого в условии, когда сдаем задачи, он пишет "дополнительные" условия, которые узнаешь только после отправления задачи.
0
Злостный нарушитель
 Аватар для Verevkin
10304 / 5726 / 1269
Регистрация: 12.03.2015
Сообщений: 26,525
13.03.2021, 20:54
Цитата Сообщение от RealmitS1 Посмотреть сообщение
он пишет
Кто такой "он"?
0
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7
13.03.2021, 20:56  [ТС]
За то из подсказок есть следующее, только что узнали:
Можно вычесть из чисел a и b число c. Тогда задача сведётся в поиску всех чисел на отрезке от a до b, которые делятся на d. Важно не забыть прибавить c к числам, которые выводятся в качестве ответа.

Ближайшее число, больше или равное a, которое делится на d можно вычислить по формуле: (a+d−1)/d∗d (деление в данном случае целочисленное).

А кто "Он"? Сириус - лагерь для тех, кто себя ненавидит.
0
Злостный нарушитель
 Аватар для Verevkin
10304 / 5726 / 1269
Регистрация: 12.03.2015
Сообщений: 26,525
13.03.2021, 21:11
Лучший ответ Сообщение было отмечено RealmitS1 как решение

Решение

Цитата Сообщение от RealmitS1 Посмотреть сообщение
Сириус - лагерь для тех, кто себя ненавидит.
Себя любить надо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
#include <cassert>
 
unsigned foo(unsigned a, unsigned b, unsigned c, unsigned d)
{
  assert(c < d);
  if (a > b) return foo(b, a, c, d);
  unsigned count = 0;
  for (a = c + (a + d - 1) / (d * d); a <= b; a += d, count++)
    printf(" %u \n", a);
  return count;
}
 
/* Даны целые неотрицательные числа a, b, c, d, при этом 0≤c<d. 
  Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d.
  В этой задаче нельзя использовать инструкцию if, должен быть только один цикл.  */
 
int main()
{
  printf("\n Всего найдено: %u\n", foo(1, 150, 7, 13));
  return 0;
}
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
13.03.2021, 22:17
Цитата Сообщение от Verevkin Посмотреть сообщение
C++
1
for (a = c + (a + d - 1) / (d * d); a <= b; a += d, count++)
a = c + ((a + d - 1) / d) * d

Иначе некорректно например в таком случае: foo(2, 1, 2, 2); https://ideone.com/6lp9nX
1
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7
13.03.2021, 23:13  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
int main()
{
  printf("\n Всего найдено: %u\n", foo(1, 150, 7, 13));
  return 0;
}
Спасибо за всю помощь, но нас отшили одним предложением: "Программа выдает неверный ответ."
Что мы только не пытались делать: адаптировать, изменять, расширять и т.д. и т.п.
В итоге, мы встряли на этих вариантах:
1) - самый приближенный, упрощенная версия вашего решения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
int main()
{
    long a, b, c, d;
    cin >> a >> b >> c >> d;
    a -= c; b -= c;
    a = (a + d - 1) / (d * d) + c; // a = a + (a + d - 1) / (d * d);
    for (; a <= b; a += d)
    {
        cout << a << ' ';
    }
    return 0;
}
2) И то, что работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
int main()
{
    long a, b, c, d;
    cin >> a >> b >> c >> d;
    a -= c; b -= c;
    a = a + (a + d - 1) / (d * d);
    for (; a <= b; a += d)
    {
        cout << a << ' ';
    }
    return 0;
}
Вероятнее всего, что проблема в выводе "0" в начале первого решения, но без if и т.п. операций сделать это не можем, за 6 часов уже полностью сдохли)

Добавлено через 1 минуту
Цитата Сообщение от gray_fox Посмотреть сообщение
Иначе некорректно например в таком случае: foo(2, 1, 2, 2); https://ideone.com/6lp9nX
Спасибо, помогло.

Добавлено через 16 минут
Ребят, честно, уже не можем, обидно перекладывать все на вас, но это полный... Да.
Вот наш код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
long foo(long a, long b, long c, long d)
{
  for (a = c + ((a + d - 1) / d) * d; a <= b; a += d)
  cout << a << ' ';
  return 0;
}
int main()
{
  long a,b,c,d=0;
  cin >> a >>b >> c >>d;
  foo(a,b,c,d);
  return 0;
}
По-итогу выдает: "Программа выдает ошибку".

Добавлено через 28 минут
Я нашел ответ.
Вывод: Сириус - дрянь, где максимум - можно потерять весь интерес к программированию
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 using namespace std;
int main()
{
long int a,b,c,d=0;
cin>>a>>b>>c>>d;
a -=c; b-=c;
long start = (a + d - 1) / d * d;
for(long i = start; i <= b; i+=d)
{
cout << i + c << ' ';
}
}
Спасибо вам всем за помощь.


 Комментарий модератора 
Используйте кнопки языков программирования в редакторе сообщений для выделения кода
2
Злостный нарушитель
 Аватар для Verevkin
10304 / 5726 / 1269
Регистрация: 12.03.2015
Сообщений: 26,525
13.03.2021, 23:27
Цитата Сообщение от RealmitS1 Посмотреть сообщение
Вывод: Сириус - дрянь
Он на тебя отрицательно влияет: за всё это время, даже видя пример перед глазами, ты так и не додумался, что нужно вставлять код с форматированием, чтобы людям, которые пытаются тебе помочь, было удобнее читать. Беги оттуда, а то до нуля деградируешь и мозг разложится на плесень и липовый мёд.
1
0 / 0 / 0
Регистрация: 12.03.2022
Сообщений: 1
12.03.2022, 20:20
можно пожалуйста ссылку на вашу группу? тоже сижу мучаюсь с этим сириусом, один с ума сойду
0
 Аватар для Tim977
40 / 12 / 0
Регистрация: 05.08.2022
Сообщений: 12
05.08.2022, 15:51
СИРИУС ПРИНЯЛ, СМЕЛО СДАВАЙТЕ!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
using namespace std;
 
int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    int start = (a - c + d - 1) / d * d + c;
    for (int i = start; i < b + 1; i += d) {
        cout << i << endl;
    }
    return 0;
}

возможно поздновато, но мало ли, для курсов кому надо , сам голову сломал с этими примечаниями...
4
4 / 4 / 2
Регистрация: 27.08.2023
Сообщений: 106
14.10.2023, 14:31
Tim977, Спасибо, а то уже часа три мучаюсь.
0
0 / 0 / 0
Регистрация: 01.11.2023
Сообщений: 25
06.02.2024, 17:39
Программа выполнялась слишком долго и была прервана
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2024, 17:39
Помогаю со студенческими работами здесь

Найти все трехзначные числа, которые при делении на 2 дают остаток 1 и при делении на 3 остаток 2
Снова прощу о помощи . Работа в цикле. 1.Программа просит ввести любое число от 0 до 60 после чего подсчитывает сумму всех целых чисел...

Вложенный цикл. Найти трехзначные числа, которые при делении на 2 дают остаток 1, при делении на 3 остаток 2, при делении на 4 остаток 3
НАЙТИ С ПОМОЩЬЮ ВЛОЖЕННОГО ЦИКЛА))) найти асе трехзначные числа, которые при делении на 2 дают остаток 1,при делении на 3 остаток 2, при...

Найти все трехзначные числа, которые при делении на 2 дают остаток 1
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; void _tmain() {int i,j,k,a; for(i=0;i&lt;=9;i++) for(j=0;j&lt;=9;j++) ...

Найти все трёхзначные числа, которые при делении на 2 дают остаток 1
1. решила 2. Найти все трёхзначные числа, которые при делении на 2 дают остаток 1, при делении на 3 остаток 2, при делении на 4 остаток...

Найти все четырехзначные числа, которые при делении на 3 дают остаток 1
В общем у меня тут оказия произошла: попросили помочь с задачами по информатике, а прочитав их понял, что ничего уже не помню (5 лет с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru