蓝桥杯BASIC-9——基础练习 特殊回文数

 基础练习 特殊回文数  
时间限制:1.0s   内存限制:512.0MB
       
问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定

  1<=n<=54。


import java.util.Scanner;

/**
 * 
 * @author hhit.soft141.xxf
 * @date 2017-1-31
 * 注释:求6位数时可以利用减治法的思想优化算法效率
 * 不需要真的把6位数都循环一遍,因为回文数是对称的
 * 只需要求一半。5位数应该也能用这想法,但是写6位数
 * 时才想起来,就懒得改5位数的了。。。
 */
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int a, b, c, d, e;
		//求5位数
		for (int i = 10000; i < 100000; i++) {
			a = i / 10000;// 最高位
			b = (i / 10) % 10;
			c = (i / 100) % 10;// 中间位
			d = i % 10;// 个位
			e = (i / 1000) % 10;// 次高位
			if (a == d && b == e && a + b + c + d + e == n) {
				System.out.print(a + "" + e + "" + c + "" + b + "" + d + "\n");
			}

		}
		//求6位数采用减治法思想
		for (int i = 100; i < 1000; i++) {
			a = i / 100;// 最高位
			b = (i / 10) % 10;
			c = i % 10;// 个位
			if ((a + b + c) * 2 == n) {
				System.out.print(a + "" + b + "" + c + "" + c + "" + b + "" + a + "\n");
			}

		}
	}

}


猜你喜欢

转载自blog.csdn.net/qq_37518622/article/details/61616278