#搜索与回溯 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;
}

浙公网安备 33010602011771号