//将正整数n划分成k个不同的正整数(不大于max)的乘积,输出所有划分方法,如果不能则输出“无法划分” public class MultiDivision { public static boolean multiDivide(int n, int k, int max, int[] buf){ if(max == 0) return false; if(k==1) if(n<=max){ buf[buf.length-k] = n; for(int i:buf) System.out.print(i+" "); System.out.println(); return true; }else{ //不能划分为k个 return false; } boolean flag = false; for(int factor=max; factor>0; factor--){ if(n%factor == 0){//递归测试该因子是否是结果的一部分 buf[buf.length-k] = factor; boolean f = multiDivide(n/factor, k-1, factor-1, buf); flag = flag || f; } } return flag; } public static void main(String[] args){ int k=5, n=2015; int[] buf = new int[k]; if(!multiDivide(n, k, 10, buf)){ System.out.println("无法划分"); } n = 2016; if(!multiDivide(n, k, 10, buf)){ System.out.println("无法划分"); } } }
无法划分 9 8 7 4 1 8 7 6 3 2