基础练习 特殊回文数-蓝桥杯-Java

问题描述

  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不会假设这是乘法.

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页