参考别人类似九个数的问题的算法修改得到的,因为完全处理int型,所以效率很高,运行速度很快,不过总觉得还有改进之处
public class NinePuzzle {
public static void solve() {
int a[] = new int[10];
int s;
int k;
// 123456789组成的三位数中最小的为123,最大的为987
// 因此也就是两数之和最大为987,因此使第一个数从123
// 开始递增,第二个数从987-123=864开始递减,为避免重复
// i递增上限为494,j的递减下限为495
for (int i = 123; i <= 494; i++) {
// i从9个数组成的三位数中最小的数123开始
for (int j = 864; j > 494; j--) {
// j从864开始.
for (int h = 1; h < 10; h++)
a[h] = 0;
k = i + j;
// k为i和j的和.但是也不能大于987
if (k < 987) {
a[i / 100] = 1;
a[i / 10 % 10] = 1;
a[i % 10] = 1;
a[j / 100] = 1;
a[j / 10 % 10] = 1;
a[j % 10] = 1;
a[k / 100] = 1;
a[k / 10 % 10] = 1;
a[k % 10] = 1;
s = 0;
for (int h = 1; h < 10; h++)
s = s + a[h];
if (s == 9)
System.err.printf("i=%d,j=%d,k=%d\n", i, j, k);
}
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
solve();//调用函数
}
}
参考资料:http://zhidao.baidu.com/question/14846290.html