Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2011, 17:08   #1
DarkMage
Пользователь
 
Регистрация: 02.04.2010
Сообщений: 12
По умолчанию разложение натурального числа

Задание: Перечислить все способы представления заданного натурального числа в виде суммы монотонно убывающей последовательности натуральных чисел.

Например:

4=4
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1
5=5
5=4+1
5=3+2
5=3+1+1
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1

Нам нужно реализовать через рекурсию. вот что у меня получилось:

#include <iostream>
int n,h=0,q;
using namespace std;
void f(int k)
{
int m;
if(k>q) {f(k-1); return;}
h=0;m=k;
while(k)
{
if(h+k+q<=n) {cout<<'+'<<k; h+=k;} else k--;
}
if(m>1){ cout<<'\n'<<n<<"="<<q; f(m-1);}
}
int main()
{
int i;
cin>>n;
for(i=0;i<n;i++)
{
q=n-i;
cout<<n<<"="<<q;
f(i);cout<<endl;
}
}

ошибка в том что например для числа 6 он пропускает 1 строку. он пишет 6=2+2+2, а потом сразу 6=2+1+1+1+1. нету 6=2+2+1+1. Жду ваших советов по устранению этой ошибки.

Последний раз редактировалось DarkMage; 31.03.2011 в 17:12.
DarkMage вне форума Ответить с цитированием
Старый 31.03.2011, 17:38   #2
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

конечно может и не самый лучший вариант, но зато работает
Код:
#include <iostream>
using namespace std;
int a [100];
int razb(int l)
{
    int i = l-1, s = a[l];
	if (l == 1)return 0;
	while (i>1 && a[i-1]<=a[i])
	{
		s += a[i];
		i--;
	}
	a[i]++;
    l = i+s-1;
	for (int j = i+1; j <= l; j++)
		a[j] = 1;
	for (int j = 1; j <=l; j++)
		cout<<a[j]<<" ";
	cout<<endl;
	razb(l);
}
int main()
{
	int n;
	cin>>n;
	for (int i=1;i<=n;i++)
	{
		a[i]=1;
		cout<<a[i]<<" ";
	}cout<<endl;
razb(n);
	return 0;
}
Летучий_СкилетиК вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Количетсво цифр натурального числа Джиган Помощь студентам 3 13.03.2011 08:52
Разбиение натурального числа на 3 слагаемых Neitrosha Помощь студентам 13 27.10.2010 18:45
Разложение натурального числа на простые множители (Delphi) giga_person Помощь студентам 3 17.03.2010 16:24
Составить программу нахождения натурального числа n livestrong Помощь студентам 14 24.12.2008 18:15
вывод на экран наибольшего делителя натурального числа N, меньше заданного натурального M Fatality Помощь студентам 2 03.12.2008 23:27