0-9选6个数加起来等于33的排列组合,数字可以重复。
简单粗暴的排列算法:
java
public class BruteForceArrangement { public static void main(String[] args) { for (int a = 0; a < 10; a++) for (int b = 0; b < 10; b++) for (int c = 0; c < 10; c++) for (int d = 0; d < 10; d++) for (int e = 0; e < 10; e++) for (int f = 0; f < 10; f++) if (a + b + c + d + e + f == 33) System.out.printf("%d%d%d%d%d%d\n", a, b, c, d, e, f); } }
简单粗暴的组合算法:
java
public class BruteForceCombination { public static void main(String[] args) { for (int a = 0; a < 10; a++) for (int b = a; b < 10; b++) for (int c = b; c < 10; c++) for (int d = c; d < 10; d++) for (int e = d; e < 10; e++) for (int f = e; f < 10; f++) if (a + b + c + d + e + f == 33) System.out.printf("%d%d%d%d%d%d\n", a, b, c, d, e, f); } }
递归实现:
java
public class Demo { public static void main(String[] args) { new Demo().go(); } int[] numbers = new int[6]; private final int result = 33; public void go() { compute(0, 0, 0); } private void compute(int index, int start, int n) { for (int i = start; i <= 10; i++) { numbers[index] = i; int m = n + i; if (m == result) { print(); } else if (m > result) { break; } else if (index < 5) { compute(index + 1, i, m); } } numbers[index] = 0; } private void print() { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < 5; i++) { buffer.append(numbers[i]) .append(" + "); } buffer.append(numbers[5]) .append(" = ") .append(result); System.out.println(buffer.toString()); } }