看Java编程思想的时候看到了这个吸血鬼数,感觉比较有意思就想写下来记录一下,我的这个是针对四位数的,更高的也可以适当向上拓展,我写的时候里面比较麻烦的就是结果重复问题了,用了个静态变量就好了,我的具体思想就是得到一个四位数,将它分开成4个数字,求全排列和全排列对应的值,这里面有重复数字的时候全排列就会重复,确实蛋疼,不过还是解决了。好吧,看代码吧。
public class Main {
private static int lastNumber = 0;
private void magicNumber() {
int[] nums = new int[4];
for (int i = 1000; i < 10000; i++) {
if (i % 100 == 0) {
continue;
}
int t = i;
nums[0] = t / 1000;
t %= 1000;
nums[1] = t / 100;
t %= 100;
nums[2] = t / 10;
nums[3] = t % 10;
isMagic(i, nums, 0);
}
}
private void isMagic(int number, int[] nums, int index) {
int a, b;
for (int i = index; i < nums.length; i++) {
int t = nums[index];
nums[index] = nums[i];
nums[i] = t;
a = nums[0] * 10 + nums[1];
b = nums[2] * 10 + nums[3];
if (a * b == number) {
if (number == lastNumber) {
break;
}
System.out.println(a + " * " + b + " = " + number);
lastNumber = number;
}
isMagic(number, nums, index + 1);
t = nums[index];
nums[index] = nums[i];
nums[i] = t;
}
}
public static void main(String[] args) {
long t1 = System.currentTimeMillis();
Main main = new Main();
main.magicNumber();
System.out.println(System.currentTimeMillis() - t1);
}
}
不足之处请多多包涵,错误欢迎指出