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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2018, 22:28   #1
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию Разложение числа на слагаемые

пробую решить данную задачу рекурсивно, но не получается, в конце что то идет не так, как бы похитрее переделать?
Код:
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
vector<int>vec(1,1);

void sum(int num)
{
	if (num == 1)
	{return;}
	
	else
	{
		vec.pop_back();
		vec.push_back(num - 1);
		vec.push_back(1);
		for (int i = vec[vec.size() - 2], j = vec[vec.size() - 1]; i > 0; i--, j++)
		{
			vec[vec.size() - 1] = j;
			vec[vec.size() - 2] = i;
			for (unsigned int i = 0; i < vec.size(); ++i)
			{
				if (i + 1 != vec.size())
					cout << vec[i] << "+";
				else
					cout << vec[i] << endl;
			}
			sum(vec.back());
		}
	}
	vec.erase(vec.begin());
}
int main()
{
	sum(5);
}
SadiQ228 вне форума Ответить с цитированием
Старый 12.12.2018, 04:03   #2
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию

чуть изменил код, теперь два раза показывает не то что нужно, рекурсия не отрабатывает при откате! буду рад любой подсказке почему так происходит или помощи советом!
йцу.jpg
Код:
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
vector<int>vec(1,1);
void sum(int num)
{
	if (num == 1)
	{
		vec.push_back(1);
		return;
	}

	vec.pop_back();
	vec.push_back(1);
	vec.push_back(num - 1);
	for (int i = vec[vec.size() - 2], j = vec[vec.size() - 1]; j; i++, j--)
	{
		vec[vec.size() - 1] = j;
		vec[vec.size() - 2] = i;
		for (unsigned int i = 0; i < vec.size(); ++i)
		{
			if (i + 1 != vec.size())
				cout << vec[i] << "+";
			else
				cout << vec[i] << endl;
		}
		sum(vec.back());
		vec.erase(vec.begin());
	}
}
int main()
{
	sum(5);
}
SadiQ228 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разместить слагаемые в последовательных ячейках в зависимости от известного числа kyrus Microsoft Office Excel 2 06.01.2014 03:13
Разложение натурального числа с++ Dashka13 Помощь студентам 6 20.05.2011 13:59
разложение натурального числа DarkMage Помощь студентам 1 31.03.2011 17:38
Разбиение числа на слагаемые p1r2o3 Помощь студентам 23 16.03.2010 13:38
Разложение числа на слагаемые Oleg-vp Общие вопросы Delphi 5 30.10.2007 10:43