2022蓝桥杯B组

打印 上一主题 下一主题

主题 938|帖子 938|积分 2814

2022蓝桥杯b组

A题

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

问题描述
这天小明正在学数数。他突然发现有些正整数的形状像一座“山”,比如 123565321、145541,它们左右对称(回文)且数位上的数字先单调不减,后单调不增。小明数了很久也没有数完,他想让你告诉他在区间 [2022, 2022222022] 中有多少个数的形状像一座“山”。
  1. public class B3 {
  2.         public static void main(String[] args) {
  3.             //记录满足条件的个数
  4.             int count = 0;
  5.             for (int i = 2022; i <= 2022222022; i++) {
  6.                 //int -> String
  7.                 String s = i + "";
  8.                 //String -> char[]
  9.                 char[] t = s.toCharArray();
  10.                 if (pdhws(t)) {
  11.                     if (pdsw(t)) {
  12.                         System.out.println(t);
  13.                         count++;
  14.                     }
  15.                 }
  16.             }
  17.             System.out.println(count);
  18.         }
  19.         /**
  20.          * 判断是否是回文数
  21.          *
  22.          * @param t
  23.          * @return
  24.          */
  25.         public static boolean pdhws(char[] t) {
  26.             boolean flag = true;
  27.             int mid = t.length / 2;
  28.             for (int j = 0; j < mid; j++) {
  29.                 if (t[j] == t[t.length - j - 1]) {
  30.                     flag = true;
  31.                 } else {
  32.                     flag = false;
  33.                     return flag;
  34.                 }
  35.             }
  36.             return flag;
  37.         }
  38.         /**
  39.          * 是否是先单调不减,后单调不增
  40.          *
  41.          * @param t
  42.          * @return
  43.          */
  44.         public static boolean pdsw(char[] t) {
  45.             boolean flag = true;
  46.             int mid = t.length / 2;
  47.             for (int j = 0; j < mid; j++) {
  48.                 if (t[j] <= t[j + 1]) {//因为取一半,所以只需要判断单调不减或单调不增就可以
  49.                     flag = true;
  50.                 } else {
  51.                     flag = false;
  52.                     return flag;
  53.                 }
  54.             }
  55.             return flag;
  56.         }
  57.     }
复制代码
这道题的思路在于,首先通过S读入字符,然后通过java中的格式,将其转化为字符数组
建立一个新数组,由于java中字符能直接加减的形式,进行计算
'A'-'B'=1
arr++;数组内值增加
最后就是(char)("A"+i)  ('A'+i)是数字形式,直接转字符

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表