自然数可以拆分成几个数的相加?
比如 4可以拆成:
4=1+1+1+1
4=1+1+2
4=1+3
4=2+2
注意4=4不算
典型的小学题目O(∩_∩)O哈哈~
4可以看做3拆分数+1 ==>4
3拆分数可以看做2拆分数+1 ==>3
2拆分数看做1拆分数+1 ==>2
int num[100],sum=0,N;
//打印函数
void print(int k)
{
int i=0;
cout<<N<<"="<<num[1];
for(i=2;i<=k;i++)
{
cout<<"+"<<num[i];
}
cout<<endl;
}
void split(int n,int index)
{
int temp;
for(int i=1;i<=n;i++) //从1开始拆分 4=1+1+1+1
{
//因为拆分是按从多到少 从小到大来的 所以不能小于前一个
//比如4=1+1+1+1 后面就是4=1+1+2
if(i>=num[index-1])
{
num[index] = i; //计入结果集中
temp = n-i; //减去i
if(temp==0 && index>1) //如果拆分完了 同时拆分成两个以上 7=7不算拆分
{
print(index); //输出结果 index表示拆分成几个数
}
else
{
split(temp,index+1); //递归
}
num[index]=0; //回溯
}
}
}
int main()
{
cin>> N;
split(N,1);
}