P2404 自然数的拆分问题(简单dfs)

题目背景

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。

题目描述

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。

输入输出格式

输入格式:

 

输入:待拆分的自然数n。

 

输出格式:

 

输出:若干数的加法式子。

 

输入输出样例

输入样例#1: 复制

7

输出样例#1: 复制

1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+2+2
1+2+4
1+3+3
1+6
2+2+3
2+5
3+4

说明

用回溯做。。。。n<=8

 

题目解析:简单dfs。

	#include 
	#include 
	#include 
	using namespace std;
	
	int vis[10];
	int a[10];
	int cnt,counts=0;
	void dfs(int n,int k,int t)//为了不重复,所以t参数表明当前的因子中最大的数,接下来的数不能小于它
	{
		if(n == cnt)
		{
			for(int i = 1; i < k; i++)
				cout<= t)
			{ 
			    a[k+1] = i;
			    k++;
				dfs(n+i,k,i);
				k--;
			}
		}
	}
	int main()
	{
		cin>>cnt;
		dfs(0,0,0);
		return 0;
	 } 

 

你可能感兴趣的:(ACM,DFS)