【蓝桥杯 第十三届省赛Java B组】真题训练(A - F)

目录

A、星期计算 - BigInteger

B、山 - 暴力判断 + 字符串

C、字符统计 - 简单哈希

D、最少刷题数 - 排序 + 思维 + 二分 + 分情况讨论

(1)(错误)自写哈希表

(2)正解 

E、求阶乘 - 数学思维 + 二分

F、最大子矩阵 - (没过)暴力


A、星期计算 - BigInteger

思路:

20^22用电脑自带的计算器也可以算,用Math.pow也可以,这里运用BigInteger

答案:7

import java.math.BigInteger;
import java.util.*;public class abc {public static void main(String[] args){Scanner sc=new Scanner(System.in);BigInteger n=new BigInteger("20");BigInteger res=new BigInteger("1");for(int i=0;i<22;i++) res=res.multiply(n);res=res.mod(new BigInteger("7"));System.out.print(res.intValue()+6);}
}

B、山 - 暴力判断 + 字符串

 思路:

暴力枚举【2022,2022222022】,用long,然后判断回文和单调性即可

用StringBuilder的reverse判断回文也是可以的

答案:3138

import java.math.BigInteger;
import java.util.*;public class abc {public static void main(String[] args){Scanner sc=new Scanner(System.in);long res=0;for(long i=2022;i<=2022222022;i++)if(ck(String.valueOf(i))) res++;System.out.print(res);}public static boolean ck(String s){boolean f=true;int n=s.length();for(int i=0;i<n/2;i++)if(s.charAt(i)!=s.charAt(n-1-i)){f=false;return f;}for(int i=1;i<=n/2;i++)if(s.charAt(i)<s.charAt(i-1)) {f=false;break;}return f;}}
import java.math.BigInteger;
import java.util.*;public class abc {public static void main(String[] args){Scanner sc=new Scanner(System.in);long res=0;for(long i=2022;i<=2022222022;i++)if(ck(String.valueOf(i))) res++;System.out.print(res);}public static boolean ck(String s){int n=s.length();StringBuilder ss=new StringBuilder(s);if(s.compareTo(ss.reverse().toString())!=0) return false;for(int i=1;i<=n/2;i++)if(s.charAt(i)<s.charAt(i-1)) return false;return true;}}

C、字符统计 - 简单哈希

import java.util.*;public class abc {public static void main(String[] args){Scanner sc=new Scanner(System.in);TreeMap<Character,Integer> mp=new TreeMap<>();String s=sc.next();int maxx=0;for(int i=0;i<s.length();i++){char c=s.charAt(i);mp.put(c,mp.getOrDefault(c, 0)+1);if(mp.get(c)>maxx) maxx=mp.get(c);}String res=""; for(Map.Entry<Character,Integer> x:mp.entrySet())if(x.getValue()==maxx) res+=x.getKey();System.out.print(res);}}

D、最少刷题数 - 排序 + 思维 + 二分 + 分情况讨论

 

(1)(错误)自写哈希表

思路:

排序找出mid=a[n/2],然后小于mid的元素要么=mid要么=mid+1,这时候就要看情况了

我自己写的这个如果遇到

8
1 1 3 3 3 10 20 30

这个样例,答案输出的是:

2 2 0 0 0 0 0 0 

很明显是错误的,无法让刷题少的≥刷题多的

  • 我们需要分情况找出mid是+1还是=mid,这时候就需要统计比mid大的个数max_m和比mid小的个数min_m
  • 这个样例的mid是3,则max_m=3,min_m=2
  • 我们会发现此时如果a[i]≤mid,就需要令其等于mid+1,因为max_m>min_m,必须比mid大,才能让min_m增大
package demo_lanqiao;import java.math.BigInteger;
import java.util.*;public class abc {public static void main(String[] args){Scanner sc=new Scanner(System.in);int n=sc.nextInt();int[] a=new int[n],res=new int[n],b=new int[n];Map<Integer,Integer> mp=new HashMap<>();for(int i=0;i<n;i++){a[i]=sc.nextInt();b[i]=a[i];}Arrays.sort(a);for(int x:a) System.out.print(x+" ");System.out.println();int mid=a[n/2];for(int i=0;i<n;i++){int x=0;if(n%2==0) x=a[i]<mid? mid-a[i]:0;else if(n%2==1) x=a[i]<mid? mid+1-a[i]:0;mp.put(a[i],x);}for(int i=0;i<n;i++) res[i]=mp.get(b[i]);for(int x:res) System.out.print(x+" ");}}

(2)正解 

思路:

        先排序找出中位数mid=a[n/2],用二分统计出大于mid的个数max_m,和小于mid的个数min_m,分情况讨论:

设res为a[i]最终刷题数

  • min_m < max_m     需要让≤mid的数比mid大1,这样才可保证res>mid,保证刷题多<刷题少
    • 8
    • 1 1 3 3 3 10 20 30
  • min_m == max_m  需要让<mid的数比mid大1,才能保证res>mid,刷题多<刷题少
    • 5
    • 1 2 3 4 5
  • min_m > max_m    只要让<mid的数=mid即可,这样既刷题多<刷题少,又能保证刷题数最少
    • 6
    • 1 1 1 2 4 5

蓝桥杯官网的测评机同一个代码每一次测的百分比都不一样。。。。

蓝桥杯2022年第十三届省赛真题-最少刷题数 - C语言网

import java.math.BigInteger;
import java.util.*;public class abc {public static void main(String[] args){Scanner sc=new Scanner(System.in);int n=sc.nextInt();int[] a=new int[n],t=new int[n];for(int i=0;i<n;i++){a[i]=sc.nextInt();t[i]=a[i];}Arrays.sort(t);int mid=t[n/2];int min_m=findmin(t,mid),max_m=n-findmax(t,mid)-1;if(min_m<max_m) for(int i=0;i<n;i++) if(a[i]<=mid) System.out.print(mid-a[i]+1+" ");else System.out.print(0+" ");else if(min_m==max_m)for(int i=0;i<n;i++) if(a[i]<mid) System.out.print(mid-a[i]+1+" ");else System.out.print(0+" ");else for(int i=0;i<n;i++) if(a[i]<mid) System.out.print(mid-a[i]+" ");else System.out.print(0+" ");}public static int findmax(int[] a,int tar){int l=0,r=a.length-1;while(l<r){int mid=l+r+1>>1;if(a[mid]<=tar) l=mid;else r=mid-1;}return l;}public static int findmin(int[] a,int tar){int l=0,r=a.length-1;while(l<r){int mid=l+r>>1;if(a[mid]>=tar) r=mid;else l=mid+1;}return r;}}

E、求阶乘 - 数学思维 + 二分

思路:

题目越短,难度越大,看数据范围就知道主打就是一个不会(暴力无法做)

思路参考:

蓝桥杯刷题014——求阶乘(二分法)-CSDN博客

很明显末尾0的出现跟因子2和5息息相关,因为2×5=10,其他数无论怎么乘都不可能出0

每个数字末尾的每个0都可以看成是2和5相乘得到

结论:给定一个数的阶乘,计算它的因子中2*5出现的次数,即可确定末尾0的个数 

而因子2无需寻找,因为相乘关系2,4,6,8中都存在2,2肯定比5多

【求N的阶乘尾部0的个数】转换为【求N的阶乘中因子5的个数】
        我们可知:1~24中每隔5个就有1个5(分别是5 10 15 20共4个),而25能分出2个5,因此25!=末尾6个0,没有5个0,如下图

为什么这样算?

【第一轮除5】我们先把含有1个及以上5的25个数全部取出一个5加到总数num,那么本来1个5的数就变成0个(可以忽略),本来2个5的数变成1个5的数,本来3个5的变成2个5的。

【第二轮除5】再对原本含有2个及以上5的5个数(现在是含有一个及以上5的数)操作一次,只剩下1个含5的数

【第三轮除5】最后再对含5的1个数取出一个5加到总数num,这样就把全部的因子5转移到了总数num

结论:求N的阶乘中因子5的个数,将N每次除以5的商求和(N中5因子的个数)即可。

因为k值很大,我们不可能枚举所有情况,而k随N增大而增加,具有单调性,可以用二分

找出≥check()的最小值【用r=mid模板】 ,检查mid末尾0的个数是否==k,如果不是返回-1

import java.util.*;public class abc {public static void main(String[] args){Scanner sc=new Scanner(System.in);long k=sc.nextLong();long l=1,r=Long.MAX_VALUE-1;while(l<r){long mid=l+r>>1;if(ck(mid)>=k) r=mid;else l=mid+1;}if(ck(r)!=k) System.out.print(-1);else System.out.print(r);}public static long ck(long n){long res=0;while(n!=0){res+=n/5;n/=5;}return res;}}

F、最大子矩阵 - (没过)暴力

 

 

六个for暴力拿10%

import java.util.*;public class abc {public static void main(String[] args){Scanner sc=new Scanner(System.in);int[][] g=new int[80][80];TreeMap<Integer,Integer> mp=new TreeMap<>();int n=sc.nextInt(),m=sc.nextInt();for(int i=0;i<n;i++)for(int j=0;j<m;j++) g[i][j]=sc.nextInt();int limit=sc.nextInt();int res=0;for(int up=0;up<n;up++)for(int dw=up;dw<n;dw++)for(int l=0;l<m;l++)for(int r=l;r<m;r++){int max=0,min=Integer.MAX_VALUE;for(int i=up;i<=dw;i++)for(int j=l;j<=r;j++){if(g[i][j]>max) max=g[i][j];if(g[i][j]<min) min=g[i][j];}if(max-min>=0&&max-min<=limit&&(dw-up+1)*(r-l+1)>res){res=(dw-up+1)*(r-l+1);//System.out.println("["+max+","+min+"]"+up+" "+dw+" "+l+" "+r+" "+res);}}System.out.print(res);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/191201.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postman小白安装和注册入门教程

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;安装 访问官网https://www.getpostman.com/downloads/&#xff0c;直接下载安装。 二&#xff09;注册和登录…

【python自动化】Playwright基础教程(六)事件操作③单击双击计数过滤截图JS注入

【python自动化】Playwright基础教程(六)事件操作③单击&双击&计数&过滤&截图&JS注入 本文目录 文章目录 【python自动化】Playwright基础教程(六)事件操作③单击&双击&计数&过滤&截图&JS注入playwright系列回顾前文代码点击 - click…

基于单片机智能输液器监控系统的设计

**单片机设计介绍&#xff0c; 基于单片机智能输液器监控系统的设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能输液器监控系统可以实现对输液过程的实时监测和控制&#xff0c;以下是一个基本的设计介绍&am…

简单地聊一聊Spring Boot的构架

本文由葡萄城技术团队发布。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 本文小编将详细解析Spring Boot框架&#xff0c;并通过代码举例说明每个层的作用。我们将深入探讨Spring Boot的…

二维码智慧门牌管理系统升级,实现综合运营可视化

文章目录 前言一、升级解决方案概述二、重点指标综合展示三、综合运营可视化 前言 随着科技的发展和城市化进程的加速&#xff0c;传统的门牌管理系统已经无法满足现代社会的需求。为了解决这一问题&#xff0c;一款二维码智慧门牌管理系统应运而生&#xff0c;为城市管理和运…

Nginx 使用笔记大全(唯一入口)

Linux服务器因为Nginx日志access.log文件过大项目无法访问 项目处于运行状态下无法访问&#xff0c;第一步查看磁盘状态 1、查看磁盘状态 df -h 2、查找100M以上的文件 find / -size 100M |xargs ls -lh 3、删除文件 rm -rf /usr/local/nginx/logs/access.log 4、配置nginx.…

类和对象(4):Date类.运算符重载 1

一、赋值运算符重载 1.1 运算符重载 运算符重载是具有特殊函数名的函数&#xff0c;函数名字为&#xff1a;关键词operator需要重载的运算符符号。 不能重载C/C中未出现的符号&#xff0c;如&#xff1a;operator。重载操作符必须有一个类类型参数。不能改变用于内置类型运算…

计算机毕业设计选题推荐-公共浴池微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

【Redis】Zset有序集合

上一篇&#xff1a; Hash哈希类型 https://blog.csdn.net/m0_67930426/article/details/134382507?spm1001.2014.3001.5502 目录 Zadd Zrange Zcard Zcount Zrem set是一个无序且元素不可重复的集合 而Zset是一个有序的集合,集合里的每个元素都有一个评分&#xff08;…

为什么Android 手机这么慢?如何提高 Android 手机的运行速度

速印机&#xff08;理想、荣大等&#xff09;、复印机&#xff08;夏普、东芝、理光、佳能、震旦等全系列&#xff09;、打印机、扫描仪、传真机、多媒体教学一体机、交互式电子白板、报警器材、监控、竞业达监考设备及其它监考设备、听力考试设备、特种安防设备维护及维修。吴…

C++引用 引用做函数参数

一.引用的定义和语法 // 给a取别名为b int &b a; // 修改b的值&#xff0c;a的值也会被修改&#xff0c;因为他们都指向同一个内存空间 b 20; 二.引用的注意事项 1.引用必须初始化如 int&b; 是错误的&#xff0c;因为没有初始化。 2.引用在初始化后&#xff0c;不…

IT服务台与Microsoft集成

Microsoft Teams 旨在通过创建一个共享工作区&#xff0c;使组织中的协作更加轻松&#xff0c;用户可以在其中聊天、开会、共享文件和访问业务应用。为了实现这些数字工作空间的最大效率&#xff0c;这一点很重要&#xff0c;当出现问题时&#xff0c;IT服务台团队始终在前沿。…

RabbitMQ实战

文章目录 1、简介2、MQ优点缺点MQ的应用场景AMQP工作原理市面上常见的MQ 3、Linux安装RabbitMQ3.1 版本对应3.2 安装socat3.3 下载 Erlang/OTP、安装、验证 erlang方法一&#xff1a;1. 下载2. 将下载的Erlang服务上传到服务器上面3. 解压4. 编译erlang的依赖环境5. 安装Erlang…

简洁高效的微信小程序分页器封装实践

前言 在现今的移动应用开发中&#xff0c;微信小程序已经成为了一个备受欢迎的平台。然而&#xff0c;随着应用的复杂性增加&#xff0c;数据的管理和加载成为了一个问题。本文将探讨微信小程序中的一个关键概念&#xff1a;封装分页器&#xff0c;它是提升小程序性能和用户体验…

聚观早报 |滴滴发布Q3财报;小鹏G9连续销量排行第一

【聚观365】11月14日消息 滴滴发布Q3财报 小鹏G9连续销量排行第一 XREAL双11实现7倍增长 真我GT5 Pro真机图 2024年智能手机AI功能竞争激烈 滴滴发布Q3财报 滴滴在其官网发布2023年三季度业绩报告。报告显示&#xff0c;三季度滴滴实现总收入514亿元&#xff0c;同比增长…

④【数据查询】MySQL查询语句,拿来即用。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MySQL查询操作 ④【数据查询】MySQL查询语句&a…

Docker 中的端口

Docker 中的端口 0.0.0.0:8080->80/tcp &#xff0c;主机&#xff08;即运行 Docker 的机器&#xff09;监听8080端口&#xff0c;如果有请求转发到容器的 80 端口上去。 详细解释一下&#xff1a; 0.0.0.0:8080->80/tcp &#xff1a;这是一个端口映射规则。 0.0.0.0:80…

如何保护电动汽车充电站免受网络攻击

根据国际能源署 (IEA) 的一份报告&#xff0c;如今&#xff0c;全球销售的汽车中约有七分之一是电动汽车。虽然这对环境来说是个好消息——有可能使占总碳排放量16% 的道路交通脱碳——但这也带来了针对电动汽车充电站的网络攻击日益严重的威胁。 电动汽车充电站、数据流网络和…

PyCharm因安装了illuminated Cloud插件导致加载项目失败

打开Pycharm时会有弹窗提示&#xff1a; The license for Illuminated Cloud is invalid or has expired. All Illuminated Cloud features will be disabled. 这个弹窗会导致你加载项目一直失败&#xff0c;close project 也关不掉&#xff0c;我都是用任务管理器杀死进程的…

家政服务小程序源码系统+上门预约服务 源码完全开源可二次开发 带完整的搭建教程

在互联网的快速发展下&#xff0c;传统的家政服务行业也在逐步向数字化、智能化方向转型。为了满足消费者对于家政服务的高品质需求&#xff0c;罗峰给大家分享一款基于微信小程序的上门预约家政服务系统。该系统采用完全开源的源码系统&#xff0c;可进行二次开发&#xff0c;…