Java編程思想之吸血鬼數

看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++) {
            // 要求不能以00結尾
            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++) {
            // Java交換數字好麻煩
            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;
        }
    }
    // 1260 1395 1435 1530 1827 2187 6880

    public static void main(String[] args) {
        // 計算時間
        long t1 = System.currentTimeMillis();
        Main main = new Main();
        main.magicNumber();
        System.out.println(System.currentTimeMillis() - t1);
    }
}

不足之處請多多包涵,錯誤歡迎指出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章