2. 自然数的拆分

2024-01-09 18:28:21
题目描述

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

当n=7共14种拆分方法:

7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
total=14
输入格式

输入n。

输出格式

按字典序输出具体的方案。

样例输入
7
样例输出
#include<bits/stdc++.h>
using namespace std;
int a[10001]={1},n,total;
int search(int,int);
int print(int);
int search(int s,int t)
{
	int i;
	for(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; 
		}
	}
	return 0;
}
int print(int t)
{
	cout<<n<<"=";
	for (int i=1;i<=t-1;i++) 
	{
		cout<<a[i]<<"+";
	}
	cout<<a[t]<<endl; 
	total++;  
	return 0;
}
 
int main() {
	cin>>n;
	search(n,1);  
	cout<<"total="<<total<<endl;  
	return 0;
}
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4

文章来源:https://blog.csdn.net/wanghong20100925/article/details/135466998
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。