/*
* 整数划分问题相信很多人都做过,题意是这样的:
将正整数n表示成一系列正整数之和,
n=n1+n2+,,,,,+nk(其中n1>=n2>=......>=nk>=1,k>1)
例如:正整数6有如下11种不同的划分,
6=1+1+1+1+1+1
6=1+1+1+1+2
6=1+1+1+3
6=1+1+2+2
6=1+1+4
6=1+2+3
6=1+5
6=2+2+2
6=2+4
6=3+3
6=6
*/
//使用递归实现,感觉时间将会很客观
import java.util.*;
public class Main3 {
// sumFound记录总数
public static int n, sumFound = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for (int i = 1; i <= n; i++) {
// 调用递归
sear(i, "", i);
}
System.out.println(sumFound + "种排序");
}
// 递归实现
public static void sear(int sum, String str, int tm) {
// 大于该值则退出,
if (sum > n) {
return;
}
// 输出的满足条件的字符串
if (str.length() == 0) {
str += tm;
} else {
str += "+" + tm;
}
// 满足条件
if (sum == n) {
sumFound++;
System.out.println(n + "=" + str);
return;
}
// 继续递归调用i<=tm是除去那些重复的情况
for (int i = 1; i < n && i <= tm; i++) {
sear(sum + i, str, i);
}
}
}
整数划分
最新推荐文章于 2020-04-10 17:07:25 发布
