蓝桥杯真题之:特殊回文数(JAVA解法)

蓝桥杯真题之:特殊回文数

题目:

 特殊回文数   

资源限制

时间限制:1.0s 内存限制:512.0MB

问题描述

  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

输入格式

  输入一行,包含一个正整数n。

输出格式

  按从小到大的顺序输出满足条件的整数,每个整数占一行。

样例输入

52

样例输出

899998
989989
998899

数据规模和约定

  1<=n<=54。

不多说:题目的大概意思是:从10000到999999中找到回文数 并找到回文数中的每一位

把他们加起来,看是否等于用户输入的那个

废话我就不多说,直接上代码:


 

import java.util.ArrayList;
import java.util.Scanner;

/**
 * 
 * @author: HaHa
 * @date: 2022年3月15日 下午3:41:58
 * @project: 特殊回文数
 */
public class Test04 {
    //头部指针
    private static int begin;
    //尾部指针
    private static int end;
    //用户输入的数据,存为全局变量
    private static int data;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        //用户输入
        data = sc.nextInt();
        //存储回文的数字(字符串类型)
        ArrayList<String> arr = new ArrayList<String>();
        
        //直接暴力安排上
        for (int i = 10001; i < 999999; i++) {
            //把数字转成string类型
            String num = Integer.toString(i);
            //初始化头部指针
            begin = 0;
            //初始化尾部指针(减一是为了索引不越界)
            end = num.length() - 1;
            //如果头部指针指向的字符和尾部指针指向的字符相等
            while (num.charAt(begin) == num.charAt(end)) {
                //是回文数
                if (begin == num.length() / 2) {
                    //添加到集合中
                    arr.add(num);
                    //直接下一步:判断每一位的累加和是否等于用户输入的
                    //  data
                    break;

                }
                //指针移动
                begin++;
                end--;
            }

        }

        //遍历集合
        for (int i = 0; i < arr.size(); i++) {
            //因为存放的是字符串
            //从集合中拿出元素,利用split方法进行分割
            //转换成一个string类型的数组
            String[] split = arr.get(i).split("");
            //字符串的长度判断
            if (split.length == 5) {
                //拿到单个字符串的前3位
                int a = Integer.parseInt(split[0]);
                int b = Integer.parseInt(split[1]);
                int c = Integer.parseInt(split[2]);
                //判断是否符合要求
                if (2 * (a + b) + c == data) {
                    System.out.println(arr.get(i));
                }
            }
            //不多说👍
            if (split.length == 6) {
                int a = Integer.parseInt(split[0]);
                int b = Integer.parseInt(split[1]);
                int c = Integer.parseInt(split[2]);
                if (2 * (a + b + c) == data) {
                    System.out.println(arr.get(i));
                }
            }
        }

    }

}

基本上思路就是这样

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值