import java.util.Scanner;
public class IntHuafen {
/* 整数划分
如,对于正整数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)
程序输出该整数的所有划分。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
int []data=new int[10000];
f(data,n,0);//打印1到n的划分
}
//n->6,curr当前位置
private static void f(int[] data ,int n,int k) {
// TODO Auto-generated method stub
if (n==0) {
for (int i = 0; i < k; i++) {
System.out.print(data[i]+" ");
}
System.out.println();
return ;
}
for (int i = n; i > 0; i--) {
if (k>0&&i>data[k-1]) {//排除后面元素大于前面元素
//开始k=0,data[k-1]会越界,但由于k>0不成立,语句结果,所以不报异常
continue;
}
data[k]=i;
f(data,n-i,k+1);
}
}
}
整数划分如,对于正整数n=6,可以分划为:6 5+1
最新推荐文章于 2022-09-05 23:09:17 发布