天天看點

任何一個大于1的自然數n,總可以拆分成若幹個小于n的自然數之和。

題目描述:

任何一個大于1的自然數n,總可以拆分成若幹個小于n的自然數之和。

代碼:

#include<iostream>
using namespace std;

int n;
int total;
int a[10001];

void print(int cnt){
	total++;
	cout<<n<<"=";
	for(int i=1;i<cnt;++i){
		cout<<a[i]<<'+';
	}
	cout<<a[cnt]<<endl;
}

void f(int num,int previous,int cnt){
	if(num==0){
		print(cnt-1);
		return;
	}
	for(int i=previous;i<=num&&i<n;++i){
		a[cnt]=i;
		num-=i;
		f(num,i,cnt+1);
		num+=i;
	}
} 

int main(){
	cin>>n;
	f(n,1,1);
	cout<<"total:"<<total;
	return 0;
}