蓝桥杯 回文数

1.题目

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入 52
样例输出
899998
989989
998899
数据规模和约定
  1<=n<=54。

2.思路

暴力破解从10000开始循环,每取出一个数就拿去判断是不是回文数。取出的数连接上字符串就可以转换成对字符串的遍历了。判断是否是回文数。对回文数的判断:使用两个指针,分别从字符串的头和尾进行遍历,判断两指针所指向的值是否相等,一旦不相等就直接返回false;相等就继续循环,结束循环后得到一个肯定是回文数的字符串,再去判断所有数字的和是否为刚开始传入的数。

import java.util.Scanner;

public class NumberOfResponses {
    
    

	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		sc.close();
		String s = "";
		for(int i = 10000; i < 1000000; ++i) {
    
    
			if(isReponsesNumber(i + s,i,a) ) {
    
    
				System.out.println(i);
			}
		}
	}
	public static boolean isReponsesNumber(String s, int m, int sum) {
    
    
		int len = s.length();
		int j = len - 1;
		int i = 0;
		while(i <= len / 2 && j >= len / 2) {
    
    
			
			if(s.charAt(i) != s.charAt(j)) {
    
    
				return false;
			} else
			i += 1; j -= 1;	
		}
		int all = 0;
		int b = m;
		while(b > 0) {
    
    
			int a = b % 10;
			 b = b / 10;
			all += a;
		}
		if(all == sum) {
    
    
			return true;
		} else
			return false;
	}
}

学习心得:发现自己做题不爱写注释,以后希望可以多些注释对重要的变量或者方法进行说明。

猜你喜欢

转载自blog.csdn.net/balder_girl/article/details/113479150