问题描述
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));
}
}
}
容易出现的错误: if(2a+2b+c==n){ ...} 此时条件处会出现错误:Syntax error on token "a", delete this token
分 析: 2a+2b+c == n是一个数学表达式,必须在java中为2*a + 2*b + c == n,
对于 2a ,Java不会假设这是乘法.