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

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

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

Author24 — интернет-сервис помощи студентам
Остатки
Даны целые неотрицательные числа 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2021, 19:45
Ответы с готовыми решениями:

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

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

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

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

18
Заблокирован
13.03.2021, 20:09 2
Цитата Сообщение от RealmitS1 Посмотреть сообщение
не могу никак понять как сделать это без операторов сравнения.
Тернарный оператор можно юзать?
0
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7
13.03.2021, 20:10  [ТС] 3
Тернарные операторы использовать нельзя, пробовал.
0
Заблокирован
13.03.2021, 20:41 4
Лучший ответ Сообщение было отмечено 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  [ТС] 5
Спасибо, что помогаете, но боюсь тут уже вообще все бессильно.
"Программа не соответствует требованиям:
в коде программы используются условный оператор if и массив, что запрещено условиями задачи".
0
Заблокирован
13.03.2021, 20:47 6
Цитата Сообщение от RealmitS1 Посмотреть сообщение
Программа не соответствует требованиям:
в коде программы используются условный оператор if и массив, что запрещено условиями задачи
ЧЗХ? Где в условии запрещено использовать массив?
0
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7
13.03.2021, 20:49  [ТС] 7
Вот такие веселые задачи, сами сидим группой уже пятый час.
0
Заблокирован
13.03.2021, 20:52 8
Цитата Сообщение от RealmitS1 Посмотреть сообщение
Вот такие веселые задачи, сами сидим группой уже пятый час.
Где в условии запрещено использовать массив?
0
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7
13.03.2021, 20:54  [ТС] 9
Нет такого в условии, когда сдаем задачи, он пишет "дополнительные" условия, которые узнаешь только после отправления задачи.
0
Заблокирован
13.03.2021, 20:54 10
Цитата Сообщение от RealmitS1 Посмотреть сообщение
он пишет
Кто такой "он"?
0
3 / 3 / 0
Регистрация: 13.03.2021
Сообщений: 7
13.03.2021, 20:56  [ТС] 11
За то из подсказок есть следующее, только что узнали:
Можно вычесть из чисел a и b число c. Тогда задача сведётся в поиску всех чисел на отрезке от a до b, которые делятся на d. Важно не забыть прибавить c к числам, которые выводятся в качестве ответа.

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

А кто "Он"? Сириус - лагерь для тех, кто себя ненавидит.
0
Заблокирован
13.03.2021, 21:11 12
Лучший ответ Сообщение было отмечено 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!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
13.03.2021, 22:17 13
Цитата Сообщение от 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  [ТС] 14
Цитата Сообщение от 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
Заблокирован
13.03.2021, 23:27 15
Цитата Сообщение от RealmitS1 Посмотреть сообщение
Вывод: Сириус - дрянь
Он на тебя отрицательно влияет: за всё это время, даже видя пример перед глазами, ты так и не додумался, что нужно вставлять код с форматированием, чтобы людям, которые пытаются тебе помочь, было удобнее читать. Беги оттуда, а то до нуля деградируешь и мозг разложится на плесень и липовый мёд.
1
0 / 0 / 0
Регистрация: 12.03.2022
Сообщений: 1
12.03.2022, 20:20 16
можно пожалуйста ссылку на вашу группу? тоже сижу мучаюсь с этим сириусом, один с ума сойду
0
40 / 12 / 0
Регистрация: 05.08.2022
Сообщений: 12
05.08.2022, 15:51 17
СИРИУС ПРИНЯЛ, СМЕЛО СДАВАЙТЕ!!!

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
0 / 0 / 0
Регистрация: 27.08.2023
Сообщений: 57
14.10.2023, 14:31 18
Tim977, Спасибо, а то уже часа три мучаюсь.
0
0 / 0 / 0
Регистрация: 01.11.2023
Сообщений: 9
06.02.2024, 17:39 19
Программа выполнялась слишком долго и была прервана
0
06.02.2024, 17:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2024, 17:39
Помогаю со студенческими работами здесь

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

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

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

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

Найдите все числа,при делении на 3 дают остаток 1,а при делении на 5 дают остаток 3
Найдите все числа,при делении на 3 дают остаток 1,а при делении на 5 дают остаток 3

Найдите числа, которые дают остаток 1,2,5 при делении на 7
Не получается решить задачу , как её правильно решить в питоне? Даны целые числа от 35 до 87....


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru