【蓝桥杯】基础练习特殊回文数满分解法

仅需循环 1 0 3 = 1000 10^3=1000 103=1000次即可找到所有符合要求的回文数哦!
具体思路:

  1. 分别从0~9遍历i,j,k三层循环
  2. ( i + j ) × 2 + k = n (i+j)\times2+k=n (i+j)×2+k=n代表五位十进制回文数,即 i j k j i i j k j i ijkji
  3. ( i + j + k ) × 2 = n (i+j+k)\times2 = n (i+j+k)×2=n代表六位十进制回文数,即 i j k k j i ijkkji ijkkji
  4. 每找到一个符合条件的特殊回文数就存到ArrayList中,最后进行排序并输出

具体代码如下:

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

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();

        StringBuilder paste; // 用于将符合条件的字符组合进行拼接
        ArrayList<Integer> save = new ArrayList<>(); // 用于存储数字并排序
        String temp;
        for (int i = 0; i < 10; ++i)
            for (int j = 0; j < 10; ++j)
                for (int k = 0; k < 10; ++k) {
                    // 判断六位数或者五位数之和是否为n
                    if ((i + j) * 2 + k == n) { // 五位数
                        if (i == 0) continue;   // 若开头为0则跳过
                        paste = new StringBuilder();
                        paste.append(i).append(j).append(k).append(j).append(i);
                        temp = paste.toString();
                        save.add(Integer.parseInt(temp));
                    }
                    if ((i + j + k) * 2 == n) { // 六位数
                        if (i == 0) continue;        // 若开头为0则跳过
                        paste = new StringBuilder();
                        paste.append(i).append(j).append(k).append(k).append(j).append(i);
                        temp = paste.toString();
                        save.add(Integer.parseInt(temp));
                    }
                }

        // 排序并输出
        save.sort((a , b) -> a - b);
        for (int i : save) {
            System.out.println(i);
        }
    }

}

小技巧:使用StringBuilder进行append比使用String对象一个个拼来的更快,因为String对象拼接时底层还是要创建StringBuilder对象,而且每拼接一次就创建一个(JVM底层实现就是如此)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值