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

Придумать для задачи 2 алгоритма и сравнить их порядок сложности

15.09.2017, 21:33. Показов 1080. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую всех программистов! Начался, в общем, в универе такой предмет как "алгоритмы и структуры данных", сегодня была 1-я лаба, там такое задание:
Придумать для задачи 2 алгоритма и сравнить их порядок сложности


В общем-то, задача кажется очень простой, но я почему-то в ступоре и не знаю как подступится, пока что сделал просто ввод данных с клавиатуры. Мне хочется здесь использовать как-то двумерный массив, но ума не приложу как, в С++ новичок, до этого изучали Си. В общем, вот, что имеется:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main()
{
    int n, m, v, c = 6;
 
    cout << "Enter the number of cubes: ";
    cin >> n;
    cout << "Enter the sum you need: ";
    cin >> m;
 
    int **a = new int *[n];
    for (int i = 0; i <n; i++)
    {
        a[i] = new int[c];
    }
 
    _getch();
    return 0;
}
Было бы не плохо, если бы помогли решить хотя бы одним способом, не говоря уже о двух...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2017, 21:33
Ответы с готовыми решениями:

Придумать для задачи 2 алгоритма и сравнить их порядок сложности
Здравствуйте! В универе начали изучать такой прекрасный предмет как &quot;Структуры и алгоритмы данных&quot;...

Не могу придумать код для задачи по JavaScript
Доброго времени суток, дорогие друзья. Помогите, пожалуйста, решить хотя бы 2 задачи из списка...

Не получается придумать решение для задачи: вывод даты следующего воскресенья
Здравствуйте. Задача состоит в том чтобы программа(C#) выводила дату следующего воскресенья при...

Придумать матрицу над конечным полем Fp имеющим порядок 23
Придумать матрицу 2x2 или более над каким-нибудь конечным полем Fp имеющим порядок 23. Буду очень...

11
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
15.09.2017, 23:17 2
Цитата Сообщение от SammYDeviL Посмотреть сообщение
Было бы не плохо, если бы
вы показали задание в виде текста
0
1 / 1 / 0
Регистрация: 30.11.2016
Сообщений: 31
15.09.2017, 23:22  [ТС] 3
Байт, в смысле? Не совсем понял, что вы имеете ввиду.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
15.09.2017, 23:37 4
Цитата Сообщение от SammYDeviL Посмотреть сообщение
Не совсем понял, что вы имеете ввиду.
Глазки болят. Картинки ваши смотреть. Да и правила есть... Не читали?
0
1 / 1 / 0
Регистрация: 30.11.2016
Сообщений: 31
15.09.2017, 23:49  [ТС] 5
Байт, вы правы, виноват. Я бы с удовольствием отредактировал, да вот только либо я уже спать хочу, но я не вижу на этом форуме кнопки редактирования в принципе.

Вот задание:
Придумать несколько алгоритмов и сравнить их порядок сложности в лучшем, среднем и худшем случаях для решения следующей задачи.
Игроки в кости бросают n кубиков. На каждом кубике может выпасть число от 1 до 6. Сколько существует вариантов получить сумму, равную m.
Комментарий 1: число кубиков n и нужная сумма m должны задаваться с клавиатуры.
Комментарий 2: для улучшения эффективности можно использовать различные варианты отсечения.

Пример входных данных №1:
n=2, m=10
Результат:
Вариантов – 3
(4;6), (5;5), (6;4)

Пример входных данных №2:
n=3, m=4
Результат:
Вариантов – 3
(1;1;2), (1;2;1), (2;1;1)

P.S. Очень странно, под этим сообщение есть кнопка "правка", а под предыдущими нет.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
15.09.2017, 23:53 6
Цитата Сообщение от SammYDeviL Посмотреть сообщение
но я не вижу на этом форуме кнопки редактирования в принципе.
Редактировать (исправлять) тут можно только свеженькие посты. Но вы правы - можно в новом посте все написать.
Цитата Сообщение от SammYDeviL Посмотреть сообщение
я уже спать хочу
я тоже
0
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
16.09.2017, 01:29 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int task(int n, int m) {
  int s = 0;
  if (n == 1)
    return (m >= 1 && m <= 6) ? 1 : 0;
  for (int i = 1; i <= 6; ++i) {
    s += task(n - 1, m - i);
  }
  return s;
}
 
int main() {
  std::cout << task(2, 10) << "\n";
  return 0;
}
2
1 / 1 / 0
Регистрация: 30.11.2016
Сообщений: 31
16.09.2017, 19:19  [ТС] 8
AlexVRud, что-то я не пойму вообще, как он работает. Вроде кол-во вариантов правильное выдаёт, но я абсолютно не пойму почему, и как до такого вообще можно было додуматься?)
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
16.09.2017, 19:45 9
я тот же алгоритм предложить хотел, но он не выдает сами комбинации после их числа, как в примерах
SammYDeviL, работает он элементарно
если куб всего один, вариант тоже всего один если желаемое число от 1 до 6 и ни одного если число меньше 1 или больше 6.
Если куба два, перебираем в цикле все возможные варианты первого. Тогда число, которое должно выпасть на втором равно желаемому минус то что выпало на первом. То есть перебираем в цикле значения куба и для каждого из них вызываем функцию из 1-го варианта.
Если куба 3, аналогично перебираем первый куб и для каждого варианта вызываем функцию из 2-го варианта.
Для любого другого числа N точно также перебираем первый куб, после чего вызываем функцию для (N-1) кубов.
Именно это делается в приведенном коде. Рекурсия.
1
1 / 1 / 0
Регистрация: 30.11.2016
Сообщений: 31
16.09.2017, 20:05  [ТС] 10
COKPOWEHEU, ага, я вроде понял, спасибо за разъяснение.
Правда вот да, как теперь сделать так, чтобы выводил конкретно числа?
На самом деле, мб это и не обязательно. В задании то спрашивается:"Сколько вариантов?"
0
93 / 77 / 31
Регистрация: 29.08.2017
Сообщений: 188
18.09.2017, 14:35 11
Просто парочка оптимизаций (тех самых отсечений).

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
#include <iostream>
 
using namespace std;
 
int task(int n, int m)
{
    if (n < 0) return 0;
    if (n == 0) return m == 0 ? 1 : 0;
    if (n == 1) return 1 <= m && m <= 6 ? 1 : 0;
    if (n > m || n * 6 < m) return 0; // набрать сумму невозможно (кубиков слишком много или слишком мало)
    if (n == m || n * 6 == m) return 1; // сумма может набраться только одним способом (все единички или все шестерки)
    int s = 0;
    for (int i = 1; i <= 6; ++i)
    {
        s += task(n - 1, m - i);
    }
    return s;
}
 
int main(void)
{
    int n, m;
    cin >> n >> m;
    cout << task(n, m) << endl;
    return 0;
}
1
1 / 1 / 0
Регистрация: 30.11.2016
Сообщений: 31
18.09.2017, 17:28  [ТС] 12
LazySlacker, очень благодараствую!
1
18.09.2017, 17:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2017, 17:28
Помогаю со студенческими работами здесь

Придумать две задачи для темы "Магазин комплектующих"
На курсовой Тема: магазин комплектующих надо придумать 2 проблемный задачи подскажите что можно...

Оценка сложности алгоритма
Есть пример по оценке сложности,весть гугл перерыл уже,но примеров как делать такую оценку не...

Оценка сложности алгоритма
Подскажите какая сложность у данного алгоритма, искал в интернете что за алгоритм не нашел...

Оценка сложности алгоритма
Здравствуйте, уважаемые форумчане! Появилась необходимость оценки временной сложности алгоритма...


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

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