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

Количество слагаемых - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Montanaa
5 / 5 / 1
Регистрация: 21.03.2011
Сообщений: 79
12.10.2011, 15:33     Количество слагаемых #1
Друзья, если вам не трудно, помогите пожалуйста сделать вот такую задачу:
Дано число 'N', нужно представить его в виде 'n' любых слагаемых.
Я не знаю как это нормально объяснить, но например вот так:
N = 21; n = 3; Result = 6 + 6 + 9; или N = 25; n = 5; Result = 5 + 5 + 5 + 5 + 5;
или так
N = 16; n = 2; Result = 8 + 8;
Спасибо огромное заранее !
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Montanaa
5 / 5 / 1
Регистрация: 21.03.2011
Сообщений: 79
20.10.2011, 17:57  [ТС]     Количество слагаемых #21
Цитата Сообщение от Olga_ Посмотреть сообщение
Такой алгоритм вам подходит?, а то могу еще трансформировать, мне не жалко
А как здесь посчитать количество всех разложений? Вот это если можно трансформировать)))

Добавлено через 17 часов 14 минут
ребят допишите пожалуйста, кому не трудно (
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2011, 09:31     Количество слагаемых
Еще ссылки по теме:

C++ Вычислить сумму N слагаемых
Посчитать сумму с заданной точностью eps и указать количество учтенных слагаемых C++
C++ C++ - S=1+3+5+7+ …, всего n слагаемых

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

Или воспользуйтесь поиском по форуму:
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
21.10.2011, 09:31     Количество слагаемых #22
Цитата Сообщение от Montanaa Посмотреть сообщение
А как здесь посчитать количество всех разложений? Вот это если можно трансформировать)))
Вот:
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
#include <iostream>
#define MIN(x, y)  ((x) < (y) ? (x) : (y))
long a[1000];
long count;
 
long N, k;
void Partition(long n, long high, long pos)
{
   long i;
   if (n > 0)
   {
       for (i = 1; i <= high; i++)
       {
          a[pos] = i;
          Partition(n - i, MIN(i, n - i), pos + 1);
       }
   }
   else if (pos == k)
   {
       count++;
       for (i = 0; i < pos - 1;  i++)
          std::cout << a[i] << "+";
       std::cout << a[i] << "\n";
   }
}
 
int main()
{
    std::cin >> N >> k;
    Partition(N, N - 1, 0);
    std::cout << "count = " << count;
    std::cin.get();
    return 0;
}
А если нужны все-все разложения числа n и их количество, то вот:
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
#include <iostream>
#define MIN(x, y)  ((x) < (y) ? (x) : (y))
long a[1000];
long count;
 
void Partition(long n, long high, long pos)
{
   long i;
   if (n > 0)
   {
       for (i = 1; i <= high; i++)
       {
          a[pos] = i;
          Partition(n - i, MIN(i, n - i), pos + 1);
       }
   }
   else
   {
       count++;
       for (i = 0; i < pos - 1;  i++)
          std::cout << a[i] << "+";
       std::cout << a[i] << "\n";
   }
}
 
int main()
{
    long n;
    std::cin >> n;
    Partition(n, n - 1, 0);
    std::cout << "count = " << count+1;
    std::cin.get();
    return 0;
}
Yandex
Объявления
21.10.2011, 09:31     Количество слагаемых
Ответ Создать тему
Опции темы

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