#搜索与回溯 vol.02 自然数的拆分

题目

任何一个大于1的自然数
总可以拆分成若干个小于n的自然数之和
将所有方案输出

#include <iostream>
#include <iomanip>
using namespace std;

int a[10001] = {1}, num = 0, n;
void search(int, int);
void print(int); 

int main(){
	cin >> n;
	search(n, 1);
	cout << "Number: " << num << endl;
	return 0;
}

void search(int s, int t){
	for(int i = a[t-1]; i <= s; i ++){
		if(i < n){
			a[t] = i;
			s -= i;
			if(s == 0){
				print(t);
			}
			else{
				search(s, t+1);			
			} 
			s += i; 
		}
	}
}

void print(int t){
	num ++;
	for(int i = 1; i <= t; i ++){
		cout << setw(3) << a[i];
	}
	cout << endl;
}
posted @ 2020-10-28 07:47  Cinxar  阅读(131)  评论(0)    收藏  举报