天天看點

基礎練習 特殊回文數-藍橋杯-Java

問題描述

  123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。

  輸入一個正整數n, 程式設計求所有這樣的五位和六位十進制數,滿足各位數字之和等于n 。

輸入格式

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

輸出格式

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

樣例輸入

52

樣例輸出

899998

989989

998899

資料規模和約定

  1<=n<=54。

基礎練習 特殊回文數-藍橋杯-Java

解題思路:此題關鍵是隻要了解回文數的特點,當五位數時,即兩端相等,第三位可以為1-9;當六位數時,即兩端相等;這樣的數有好多,在加入一個判斷條件即這五位數或六位數相加是否為自己輸入的n,篩選出來加入到自增數組ArrayList中進行排序後輸出即可.

誤       區: 對本體了解不深或者是個人習慣,建立了 三個數組,其實無需建立數組,隻要1-9周遊即可.下面源碼為上面代碼的優化.

源代碼:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    List list = new ArrayList();
    for (int a = 1; a <= 9; a++) {
      for (int b = 0; b < 10; b++) {
        for (int c = 0; c < 10; c++) {
          if (2*a + 2*b + c == n) {
            list.add(a * 10000 + b * 1000 + c * 100 + b * 10 + a);
            
          }
          if (2*a + 2*b + 2*c == n) {
            list.add(a * 100000 + b * 10000 + c * 1000 + c * 100 + b * 10 + a);
          }
        }

      }
    }
          /*
     * 需要按順序排列,且不知元素的個數,故存放在可自增的ArrayList數組中,
     * 并用Collections工具對數組進行排列後,
     * 再用ArrayList中的 get(int index)方法将元素依次取出即可
     */
    Collections.sort(list);
    for (int i = 0; i < list.size(); i++) {
      System.out.println(list.get(i));
    }
  }
}