問題描述
123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
輸入一個正整數n, 程式設計求所有這樣的五位和六位十進制數,滿足各位數字之和等于n 。
輸入格式
輸入一行,包含一個正整數n。
輸出格式
按從小到大的順序輸出滿足條件的整數,每個整數占一行。
樣例輸入
52
樣例輸出
899998
989989
998899
資料規模和約定
1<=n<=54。
解題思路:此題關鍵是隻要了解回文數的特點,當五位數時,即兩端相等,第三位可以為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));
}
}
}