整数的分划问题。
如,对于正整数n=6,可以分划为:
6
5+1
4+2, 4+1+1
3+3, 3+2+1, 3+1+1+1
2+2+2, 2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1+1
现在的问题是,对于给定的正整数n,编写算法打印所有划分。
用户从键盘输入 n (范围1~10)
程序输出该整数的所有划分。
#include <iostream>
using namespace std;
int a[10]={0};
int len = 0;
void fun(int n,int m){
if(n==0){ //所求数已被全部分划
cout<<a[0];
for(int i=1;i<m;++i)
cout<<"+"<<a[i];
if(m > len){
cout<<endl; //到每行最后一列长度m都为len+1,此时应换行
++len;
}
else
cout<<",";
return;
}
for(int i=n;i>=1;--i){ //按从大到小的顺序划分整数
if(m==0||i<=a[m-1]) { //右边的数不能大于左边的数
a[m]=i;
fun(n-i,m+1);
}
}
}
int main() {
int n,m=0;
cin>>n; //输入一个1-10的整数
fun(n,m); //递归的方法打印所有的整数分划
return 0;
}