慢吞云雾缓吐愁 发表于 2023-7-11 19:44:10

2022蓝桥杯B组

2022蓝桥杯b组

A题

https://img-blog.csdnimg.cn/4ac63a09fe784d7a94b710fc0cc48d09.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54mb5aW25aS55b-D5aWl5Yip5aWl5Li2,size_16,color_FFFFFF,t_70,g_se,x_16
import java.math.BigInteger;

public class A {
    public static void main(String[] args) {
      BigInteger bigInteger=new BigInteger("20");//高精度
      BigInteger a=new BigInteger("1");
      for (int i = 0; i < 22; i++) {
         a=a.multiply(bigInteger);//multiply是java中乘的意思
      }
      BigInteger c=new BigInteger("7");
      a=a.remainder(c);//remainder取余
      System.out.println(a);
    }
}这道题的重点在于利用java中得天独厚的高精度BigInteger直接生成20,然后22遍遍历得到结果,题目简单易上手
B

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


      public static void main(String[] args) {
            //记录满足条件的个数
            int count = 0;
            for (int i = 2022; i <= 2022222022; 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 == t) {
                  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 <= t) {//因为取一半,所以只需要判断单调不减或单调不增就可以
                  flag = true;
                } else {
                  flag = false;
                  return flag;
                }
            }
            return flag;
      }
    }这道题的思路在于,首先通过S读入字符,然后通过java中的格式,将其转化为字符数组
建立一个新数组,由于java中字符能直接加减的形式,进行计算
'A'-'B'=1
arr++;数组内值增加
最后就是(char)("A"+i)('A'+i)是数字形式,直接转字符

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 2022蓝桥杯B组