1. 程式人生 > 其它 >date7.20 特殊迴文數

date7.20 特殊迴文數

特殊迴文數

問題描述


123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入一個正整數n,程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n。

輸入格式


輸入一行,包含一個正整數n。

輸出格式


按從小到大的順序輸出滿足條件的整數,每個整數佔一行。

樣例輸入

52

樣例輸出

899998
989989
998899

思路

這一題思路和上一題思路相似,找尋五位和六位十進位制的迴文數,且滿足條件五位數和六位數的每位數相加等於輸入的n。不管是五位和六位相對變化的位數其實只有三位,那通過for實現三個數的變化。也可以通過遍歷五位十進位制數和六位十進位制數來找到符合符合迴文數要求且滿足每位數相加等於n。這裡要注意題目上注意了要按照銼削到大的順序輸出,所以用for迴圈變化三個數時要先輸出五位數,不能講五位和六位寫在一起,因為六位在一些情況會先滿足條件輸出,這是五位的排在六位後面沒不符合題目。使用遍歷時也要注意要先遍歷五位數然後在遍歷六位數。

程式碼

前三位數變化尋找,限制輸出方式

package daily;

import java.util.Scanner;

public class d7_20 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n =sc.nextInt();
        if(n >= 1 && n<= 54 ){
            for(int i = 0 ; i < 10 ; i++)
                for (int j = 0; j < 10 ; j++)
                    for (int k = 0; k < 10 ; k++) {
                        if (i * 2 + j * 2 + k == n) {//五個數相加等於n時輸出此五位十進位制數
                            System.out.println("" + i + j + k + j + i);
                        }
                    }
            for(int i = 0 ; i < 10 ; i++)
                for (int j = 0; j < 10 ; j++)
                    for (int k = 0; k < 10 ; k++) {
                        if ((i + j + k) * 2 == n) {//留個數相加等於n時輸出此六位十進位制數
                            System.out.println("" + i + j + k + k + j + i);
                        }
                    }
        }
    }
}

遍歷五位和六位十進位制數

package daily;

import java.util.Scanner;

public class d7_20 {
    public static void main(String[] args) {
        int i, left, right;
        int[] array = new int[6];
        int number;
        int temp;
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (number = 10000; number <= 999999; number++) {
            i = 0;
            temp = number;
            if (temp < 100000) {
                while (temp > 0) {
                    array[i++] = temp % 10;
                    temp = temp / 10;
                }
                if (array[0] + array[1] + array[2] + array[3] + array[4] == n) {
                    left = array[0] * 10 + array[1];
                    right = array[4] * 10 + array[3];
                    if (left == right) {
                        System.out.println(number);
                    }
                }
            } else {
                while (temp > 0) {
                    array[i++] = temp % 10;
                    temp = temp / 10;
                }
                if (array[0] + array[1] + array[2] + array[3] + array[4] + array[5] == n) {
                    left = array[0] * 100 + array[1] * 10 + array[2];
                    right = array[5] * 100 + array[4] * 10 + array[3];
                    if (left == right) {
                        System.out.println(number);
                    }
                }
            }
        }
    }
}