问题
对于给定的正整数n,编写算法打印所有划分。
eg:
- 输入 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
思路
使用三个传参解决该问题:
n:需要进行加法划分的整数
a:缓冲,用来保存数据
k:当前位置
实现代码
package suanfa;
public class huafen{
public static void f(int n,int[]a,int k)
{
if(n<=0)
{
for(int i=0;i<k;i++)
{//用来输出
System.out.print(a[i]+" ");
}
System.out.println();
return;
}
for(int i=n;i>0;i--)
{//用来保存,i是将要装入的整数
if(k>0&&i>a[k-1])//有前一项,且后一项不能大于前一项(避免重复)
continue;
a[k]=i;
f(n-i,a,k+1);
}
}
public static void main(String[] args) {
int[]a=new int[1000];
f(6,a,0);
}
}