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

news2024/10/6 14:09:04

目录

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.coloradmin.cn/o/1196475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI 引擎系列 5 - 以 AI 引擎模型为目标运行 AI 引擎编译器(2022.1 更新)

AI 引擎系列 5 - 以 AI 引擎模型为目标运行 AI 引擎编译器&#xff08;2022.1 更新&#xff09; 简介 在先前的 AI 引擎系列博文中&#xff0c;我们以 x86 模型为目标运行了 AI 引擎编译器&#xff0c;并运行了 X86 仿真器来验证 AI 引擎应用的功能模型。在本文中&#xff0c;…

吴恩达《机器学习》8-1->8-2:非线性假设、神经元和大脑

一、非线性假设 在之前学到的线性回归和逻辑回归中&#xff0c;存在一个缺点&#xff0c;即当特征数量很多时&#xff0c;计算的负荷会变得非常大。考虑一个例子&#xff0c;假设我们使用 &#x1d465;₁, &#x1d465;₂ 的多项式进行预测&#xff0c;这时我们可以很好地应…

汽车制动系统技术分析概要

目录 1.基本功能概述 2. 基本工作原理分析 2.1 Two-Box系统架构(Bosch_IBooster) 2.2 One-Box系统架构(Bosch_IPB) 2.3 ​​​​​​​ABS技术 2.4 TCS技术 2.5 VDC技术 2.6 EPB技术 2.7 小结 3. 该场景应用发展趋势分析 1.基本功能概述 传统汽车的底盘主要由传动系、…

容器网络-Underlay和Overlay

一、主机网络 前面讲了容器内部网络&#xff0c;但是容器最终是要部署在主机上&#xff0c;跨主机间的网络访问又是怎么样的&#xff0c;跨主机网络主要有两种方案。 二、 Underlay 使用现有底层网络&#xff0c;为每一个容器配置可路由的网络IP。也就是说容器网络和主机网络…

视频剪辑助手:轻松实现视频随机分割并提取音频保存

随着社交媒体和视频平台的日益普及&#xff0c;视频制作和分享已成为人们日常生活的一部分。无论是分享个人生活&#xff0c;还是展示才艺&#xff0c;或是推广产品&#xff0c;视频都是一个非常有效的工具。但是&#xff0c;视频制作往往涉及到大量的视频剪辑工作&#xff0c;…

FM3793A-高性能PWM控制芯片 超低成本18W-20W 恒功率PD快充

产品描述&#xff1a; FM3793A是一款应用于离线反激式转换器中的高性能电流模式PWM控制器。在 FM3793A中&#xff0c;PWM开关频率最大为65KHz。在轻载和空载条件下&#xff0c;该FM3793A启动间歇模式从而降低开关频率。FM3793A具有丰富的芯片异常状况保护功能&#xff0c;如欠压…

数据分析实战 | KNN算法——病例自动诊断分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型改进 十一、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://dow…

万物皆数——用matlab求解二阶微分方程

一、背景 毕达哥拉斯的“万物皆数”哲学观点表达了一个理念&#xff0c;即宇宙万物都可以通过数学语言来描述&#xff0c;数是万物的本原。 勾股定理就是毕达哥拉斯提出&#xff0c;因此在西方勾股定理也被叫做毕达哥拉斯定理。 工科类的专业&#xff0c;越到后面越感觉到数学…

永达理简析:利用保险的“财务规划”功能维持退休后生活水平

现代社会环境背景下&#xff0c;“自养自老”已经是一种未来养老趋势&#xff0c;很多人会为自己准备一份长期、比较周全的保障&#xff0c;这样财务规划不仅会分担子女的压力&#xff0c;也让自己有一个长远的保障。在各种财务储蓄工具中&#xff0c;商业保险占据着不可取代的…

聊聊性能测试的左移右移

前面的文章中&#xff0c;分享过我对于测试左移右移的一些思考和实践方法。有同学在后台留言问我&#xff1a;常规的性能测试一般都是在测试阶段集成测试时候才开始介入&#xff0c;很容易测试时间不够&#xff0c;可不可以借鉴测试左移右移的思路&#xff0c;更早的介入和发现…

CKA认证模块②-K8S企业运维和落地实战

CKA认证模块②-K8S企业运维和落地实战 Pod高级实战-Pod生命周期-启动钩子,停止钩子 Pod生命周期完整流程介绍 容器钩子; 容器探测; Pod重启策略; Pod的终止过程; Init容器; 初始化容器最佳实践 初始化容器与主容器区别是? init容器没有readinessProbe… [rootk8s-mast…

经典的测试开发面试题

1、你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xff0c;你应该怎样解决&#xff1f; 首先&#xff0c;将问题提交到缺陷管理库进行备案。 然后&#xff0c;要获取判断的依据和标准&#xff1a; 根绝需求说明书&#xff0c;产品说明、设计文档等&…

迷雾系统-人物驱散迷雾

使用linerRender,将人物移动数据动态添加进去&#xff0c;同样是特殊层级让FogCamera渲染 EndCapVertices的数量越多&#xff0c;矩形就变为一个椭圆形的形状&#xff0c;更适合圆形视野探索 当拐点的两个点距离太近&#xff0c;LineRender会发生扭曲&#xff0c;解决方案是在…

Redis五种数据类型及命令操作(一)

&#x1f388;个人公众号:&#x1f388; :✨✨✨ 可为编程✨ &#x1f35f;&#x1f35f; &#x1f511;个人信条:&#x1f511; 知足知不足 有为有不为 为与不为皆为可为&#x1f335; &#x1f349;本篇简介:&#x1f349; 本篇记录Redis五种数据类型及命令操作&#xff0c;如…

Java基础-面向对象进阶-多态, 包, final, 权限修饰符,代码块

Java基础-面向对象进阶-多态, 包, final, 权限修饰符,代码块 多态多态的概述多态中调用成员的特点多态的优势和弊端多态练习 包final权限修饰符代码块来源Gitee地址 多态 多态的概述 多态: 对象的多种形态多态的前提 有继承/实现关系有父类引用指向子类对象有方法的重写 多态…

Netty--NIO(Non-blocking IO)基础--三大组件

NIO&#xff08;Non-blocking IO&#xff09;是一种非阻塞的IO模型&#xff0c;它通过引入Channel和Selector的概念&#xff0c;使得一个线程能够管理多个通道&#xff0c;从而提高了IO操作的效率。本文将介绍NIO的三大组件&#xff1a;Channel、Buffer、以及Selector&#xff…

【C++对象模型】构造函数II

构造函数语意学 》》构造函数语意学I—默认构造函数的构造操作《《 》》构造函数语意学II—拷贝构造函数的构造操作《《 》》构造函数语意学III—程序转化语意学《《 拷贝构造函数的构造操作 有三种情况&#xff0c;会以一个object的内容作为另一个class object的初值。 1.…

跨镜头目标融合__追踪之目标重识别研究(跨镜头目标追踪)

文章目录 标题&#xff1a;跨镜头目标融合&#xff1b;目标重识别&#xff1b;跨镜头目标追踪&#xff1b; 1 目的&#xff1a;2 实现方法/策略&#xff1a;2.1 目标类型位置匹配&#xff08;或考虑结合目标轨迹&#xff09;2.2 目标重识别2.3 目标类型位置匹配(轨迹)目标重识别…

Linux centos系统中添加磁盘

为了学习与训练文件系统或磁盘的分区、格式化和挂载/卸载&#xff0c;我们需要为虚拟机添加磁盘。根据需要&#xff0c;可以添加多块不同大小的磁盘。具体操作讨论如下&#xff0c;供参考。 一、添加 1.开机前 有两个地方&#xff0c;可选择打开添加硬盘对话框 (1)双击左侧…

暖手宝+充电宝设计方案 可实现快速升温和充电 低成本充电电流可选

充电暖手宝因为它的便携性&#xff0c;既能供暖又能当充电宝使用而备受人们喜爱。是冬天暖手供暖的必备神器。 目前&#xff0c;市场常见的暖手宝大致有三个类型&#xff0c;分别是加热水的热水袋、通过化学反应放热的铁粉袋子和锂电供电的智能暖手宝。与常见的暖手宝不同&…