整數劃分如,對於正整數n=6,可以分劃為:6 5+1
阿新 • • 發佈:2019-01-09
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); } } }