Форум программистов, компьютерный форум CyberForum.ru

Рекурсия (алгоритм подсчета числа способов, с помощью которых можно представить число М в виде суммы) - C++

Восстановить пароль Регистрация
 
LosTSamara
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 38
11.03.2013, 20:29     Рекурсия (алгоритм подсчета числа способов, с помощью которых можно представить число М в виде суммы) #1
Нужно написать рекурсивный алгоритм подсчета числа способов, с помощью которых можно представить число М в виде суммы, каждое слагаемое которой не превосходит число N. Тут должен быть несложный алгоритм, но я никак не могу его понять, помогите пожалуйста)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2013, 20:29     Рекурсия (алгоритм подсчета числа способов, с помощью которых можно представить число М в виде суммы)
Посмотрите здесь:

можно ли заданное число представить в виде суммы двух квадратов C++
C++ Дано натуральное число n. Можно ли представить его в виде суммы трех квадратов натуральных чисел?
Можно ли заданное натуральное число М представить в виде суммы квадратов двух натуральных чисел? C++
C++ определить можно ли заданное натуральное число представить в виде квадрата какого либо простого числа
Вывести наименьшее натуральное число, которое можно представить двумя разными способами в виде суммы кубов двух натуральных чисел C++
Определить, можно ли представить число в виде суммы двух квадратов натуральных чисел C++
Найти все натуральные числа, не превосходящие числа n, которые можно представить в виде суммы слагаемых C++
Определить, можно ли представить число N в виде суммы кубов трех натуральных чисел C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
12.03.2013, 21:14     Рекурсия (алгоритм подсчета числа способов, с помощью которых можно представить число М в виде суммы) #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>
 
int calc (int m, int n)
{
    if ( m < 0 ) {
        return 0;
    }
    if ( m <= 1 || n == 1 ) {
        return 1;
    }
 
    return calc (m, n - 1) + calc (m - n, n); 
}
 
int main ()
{
    int M, N;
    std::cin >> M >> N;
 
    std::cout << calc (M, N) << std::endl;
 
    return 0;
}
а вот быстрее, с запоминанием посчитанных значений
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
32
33
34
35
36
37
38
#include <iostream>
 
#define SIZE 100
 
int arr[SIZE][SIZE];
 
int calc (int m, int n)
{
    if ( m >= 0 && m >= 0 && arr[m][n] > 0 ) {
        return arr[m][n];
    }
    if ( m < 0 ) {
        return 0;
    }
    if ( m <= 1 || n == 1 ) {
        return 1;
    }
 
    arr[m][n] =  calc (m, n - 1) + calc (m - n, n); 
 
    return arr[m][n];
}
 
int main ()
{
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            arr[i][j] = -1;
        }
    }
 
    int M, N;
    std::cin >> M >> N;
 
    std::cout << calc (M, N) << std::endl;
 
    return 0;
}
в этом случае M и N должны быть не больше SIZE (можно сделать динамический массив, тогда M и N будут ограничены размером ОЗУ).
Можно еще ускорить, если вставить код массив с предпосчитанными значениями, но это если есть острая необходимость.
Yandex
Объявления
12.03.2013, 21:14     Рекурсия (алгоритм подсчета числа способов, с помощью которых можно представить число М в виде суммы)
Ответ Создать тему
Опции темы

Текущее время: 05:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru