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

特殊迴文數

題目

問題描述
123321 是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
輸入一個正整數 n, 程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於
n 。
輸入格式
輸入一行,包含一個正整數 n。
輸出格式
按從小到大的順序輸出滿足條件的整數,每個整數佔一行。
樣例輸入
52
樣例輸出
899998
989989
998899
資料規模和約定
1<=n<=54。

思路:

  • 利用昨天寫的第二個演算法,就可以寫出來了。缺點就是,犧牲時間複雜度。
  • 迴文數,即看一邊就行了。123321 看123或321
  • 5位數 i j k j i,根據輸入的 n 判斷(2i+2j+k==n)? cout<<i<<j<<k<<j<<i;
  • 同理6位數 i j k k j i(2i+2j+2k==n)? cout<<i<<j<<k<<k<<j<<i;
  • 缺點也很明顯,for裡又嵌套了2個for,給的資料再大點就嗝屁;

程式碼:

import java.util.Scanner;

class B{
    public static void main(String[] args) {
        Scanner scanner =new Scanner(System.in);
        int n=scanner.nextInt();
        for(int i=1;i<10;i++){
            for(int j=0;j<10;j++){
                for(int k=0;k<10;k++){
                    if(2*i+2*j+k==n){
                        System.out.println(""+i+j+k+j+i);
                    }
                }
            }
        }
        for(int i=1;i<10;i++){
            for(int j=0;j<10;j++){
                for(int k=0;k<10;k++){
                    if(2*i+2*j+2*k==n){
                        System.out.println(""+i+j+k+k+j+i);
                    }
                }
            }
        }

        scanner.close();
    }
}

執行結果: