6个大于等于1 小于等于33的不同数字为一组,这一组的数字之和必须为120
用java代码实现输出这样的数字组合
朋友问我一问题,我答不上哈哈 大家一起探讨下
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- hunterli0408 2008-10-17 11:03关注
package test;
public class Test {
public static void main(String[] args) {
//构造数组 int[] numbers = new int[33]; for (int i = 0; i < 33; i++) { numbers[i] = i + 1; } //记录匹配的组合总数 int count = 0; //6层循环,每层取一个数 for (int n1 : numbers) { for (int n2 : numbers) { for (int n3 : numbers) { for (int n4 : numbers) { for (int n5 : numbers) { for (int n6 : numbers) { //判断6数之和是否为120 if ((n1 + n2 + n3 + n4 + n5 + n6) == 120) { //判断这6个数是否是升序排列 if ((n2 > n1) && (n3 > n2) && (n4 > n3) && (n5 > n4) && (n6 > n5)) { //输出 System.out.println(n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", " + n5 + ", " + n6); count++; } } } } } } } } //输出匹配的排列总数 System.out.println("\n" + count);
}
}这是用上面所说的“最土”的六层循环的实现版本,逻辑不太复杂,不知有没有Bug,最后一共输出14565条记录。如下:
...
16, 18, 20, 21, 22, 23
17, 18, 19, 20, 21, 25
17, 18, 19, 20, 22, 24
17, 18, 19, 21, 22, 2314565
不过,即使这种方法,也还是有很多可以改进的地方,可明显提高效率。比如,判断语句提前,每层一判断;限制第一层的取值上限,等等。当然,如果哪位能够给出数学上更加合理的指导的话,对于编程会有更大的帮助。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报