蓝桥杯-山(java)

问题描述

这天小明正在学数数。他突然发现有些正整数的形状像一座“山”,比如 123565321、145541,它们左右对称(回文)且数位上的数字先单调不减,后单调不增。小明数了很久也没有数完,他想让你告诉他在区间 [2022, 2022222022] 中有多少个数的形状像一座“山”。

我的思路:

啊,就暴力跑写两个方法一个判断是否是回文数,一个判断是否是先单调不减,后单调不增。一两分钟分钟就跑出来了答案3138。

代码:

package LanQiao;

/**
 * @copyright (C), 2019-2022, Kkoo
 * @author: Kkoo
 * @date: 2022/4/11 0011 11:05
 * @fileName: 山
 */
public class{
    public static void main(String[] args) {
        //记录满足条件的个数
        int count = 0;
        for (int i = 2022; i <= 20222022; i++) {
            //int -> String
            String s = i + "";
            //String -> char[]
            char[] t = s.toCharArray();
            if (pdhws(t)) {
                if (pdsw(t)) {
                    System.out.println(t);
                    count++;
                }
            }
        }
        System.out.println(count);
    }

    /**
     * 判断是否是回文数
     *
     * @param t
     * @return
     */
    public static boolean pdhws(char[] t) {
        boolean flag = true;
        int mid = t.length / 2;
        for (int j = 0; j < mid; j++) {
            if (t[j] == t[t.length - j - 1]) {
                flag = true;
            } else {
                flag = false;
                return flag;
            }
        }
        return flag;
    }

    /**
     * 是否是先单调不减,后单调不增
     *
     * @param t
     * @return
     */
    public static boolean pdsw(char[] t) {
        boolean flag = true;
        int mid = t.length / 2;
        for (int j = 0; j < mid; j++) {
            if (t[j] <= t[j + 1]) {
                flag = true;
            } else {
                flag = false;
                return flag;
            }
        }
        return flag;
    }
}