2024年第15届蓝桥杯C/C++组蓝桥杯JAVA实现

目录

第一题握手,这个直接从49累加到7即可,没啥难度,后面7个不握手就好了,没啥讲的,(然后第二个题填空好难,嘻嘻不会)

第三题.好数​编辑

第四题0R格式

宝石组合

数字接龙

最后一题:拔河


第一题握手,这个直接从49累加到7即可,没啥难度,后面7个不握手就好了,没啥讲的,(然后第二个题填空好难,嘻嘻不会)

第三题.好数

不是哥们,真比JAVA简单一倍啊,啥奇怪的东西,牛魔的奇数位偶数位都出来了。纯暴力不说了也。

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner in=new Scanner(System.in);int N=in.nextInt();int count=0;for(int i=1;i<=N;i++){int tmp=0;int k=1;int p=i;while(p!=0){//求出来个位int t=p%10;//个位if(t%2==0&&k%2!=0){tmp=1;break;}//十位,else  if(t%2!=0&&k%2==0){tmp=1;break;}k++;p=p/10;}if(tmp==1){continue;}else{count++;}}System.out.println(count);}
}

第四题R格式

开始的时候没想到用BigDecimal,寻思拿long就够,谁知道根本跑不出来,所以选择使用这个大数,大数的很多东西我都没用过,比如说什么xx次幂,还可以,四舍五入,完全没接触过,我第一次不知道有对应的方法,选择求出中间数,然后计算比如一个进行+1取舍,一个减一,然后两个/2就好

知道遇上了这个

BigDecimal.setScale()方法用于格式化小数点

BigDecimal.setScale(1)保留小数点后一位小数,四舍五入

setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4 
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4

setScale(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5也向下舍

下面这个图是从这个地方摘的

import java.util.Scanner;
import java.math.BigDecimal;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner in=new Scanner(System.in);int n=in.nextInt();BigDecimal tmp=new BigDecimal("2");BigDecimal d=new BigDecimal(String.valueOf(in.nextBigDecimal()));
//tmp此时等于16,我们需要对数字进行操作tmp=tmp.pow(n);System.out.println(d.multiply(tmp).setScale(0,BigDecimal.ROUND_HALF_UP));}
}

宝石组合

数学知识:(最小公倍数)lcm(a,b)

最小公倍数:是能被A和B整除的最小正整数值

lcm(a,b)=a*b/gcd(a,b)

gcd两者之间的最大公约数

辗转相除法:a和b两者的最大公约数gcd(b,a%b)(b,a%b         记住顺口溜吧)

最大公约数,b逗a磨b

最小公倍数,相乘除公约(最大)

这个是我看到的题解,当然了,开始看公式谁来也会一脸懵,我们这样枚举一个数字

24 12 6 他们三个的最小公倍数 能被她们三个整除的最小正整数是24

这个是题解上看到的解释。

然后我们思考一下,gcd(a,b,c)最大公约数,是不是一定不会超过三者里面最大的那个。

因此我们直接枚举S,看abc啥的是否有符合的即可(最大公约数,这个数字可以整除这三个数字,那么我们是否可以思考一下,哪些数字可以整除最大s,假如不够3个,则往后走

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static int S=100001;public static void main(String[] args) {Scanner scan = new Scanner(System.in);int N=scan.nextInt();int[] a=new int[N];for(int i=0;i<N;i++){a[i]=scan.nextInt();}
//这里是个细节,你不写这一行,有一个用例过不去,我们使用的方法和C++大哥使用方法不一样,他是用S去找a[i],我是用a[i]找S.
//区别:用S找a[i],他会自动找到顺序,比如S=3,他会先3,6,9,12这样找a[i]有没有这个值
//我们是什么a[i]找S,换句话说a[i]%S假如等于0就说明可以被a[i]整除,
//那么这里来了一个问题,我们如何确保顺序性呢,比如14523,他们的可以确认顺序,因为是从1S,2S,3S这么过来的,那么我们找就可以选择使用一个排序,这样我们遍历使用就是字典序了,然后容器选啥都可以,Array,int[],我这个优先级队列(堆),因为排序做完了Arrays.sort(a);PriorityQueue <Integer>p=new PriorityQueue<>();while(S>=1) {int count = 0;for (int i = 0; i < N; i++) {//思考清楚是谁除谁,最大公约数是x的话,是a[i]%x==0才叫x是a[i]的公约数。if (a[i]%S == 0) {p.add(a[i]);count++;}if(count==3) break;;}if(count==3) break;;p.clear();S--;}while(!p.isEmpty()){System.out.print(p.poll()+" ");}}}

数字接龙

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {
// 1:无需package
// 2: 类名必须Main, 不可修改static   int[]dx={-1,-1,0,1,1, 1, 0,-1};static   int[]dy={0,  1,1,1,0,-1,-1,-1};static Stack<Integer>q=new Stack<>();static boolean[][]vis;static  int N;static  int K;static int[][]a;static boolean[][][][]tail;//从[fx,fy]到[x,y]public  static  boolean four(int fx,int fy,int x,int y,int i){//这一步是判断他是否构成斜线,假如他是横线,或者竖直的我们不需要考虑if(i%2==1){//tail[x][fy][fx][y]==false&&tail[fx][y][x][fy]==false//   tail[fx][y][x][fy]==false&&tail[x][fy][fx][y]==falseif(tail[x][fy][fx][y]==false&&tail[fx][y][x][fy]==false) {return true;}else return false;}return true;}public  static  boolean check(int fx,int fy,int x,int y,int i){// (fy-y)/(fx-x)==1)&&x<fx//比较难处理的就是条件四if (x >= 0 && y >= 0 && x < N && y < N//当前没有被遍历过&& vis[x][y] == false&& ((a[x][y]<K&&a[fx][fy] + 1 == a[x][y]) ||a[x][y] ==(a[fx][fy]+1)%K) &&four(fx,fy,x,y,i)==true) {return true;}return false;}//表示起点public static boolean dfs(int a,int b){if(a==N-1&&b==N-1){return q.size()==N*N-1;}for(int i=0;i<8;i++){int x=a+dx[i];int y=b+dy[i];if(check(a,b,x,y,i)==true){vis[x][y]=true;tail[a][b][x][y]=true;q.add(i);if (dfs(x,y)==true) return true;vis[x][y]=false;tail[a][b][x][y]=false;q.pop();}}return false;}public static void main(String[] args) {//这道题的思考,首先肯定不是bfs因为他没办法进行回溯,我牛魔不去回溯,我怎么知道那条路可以走到,所以需要回溯,使用dfsScanner in=new Scanner(System.in);N=in.nextInt();K=in.nextInt();a=new int[N][N];//思维数组纯暴力破解tail=new boolean[N][N][N][N];for(int i=0;i<N;i++){for(int j=0;j<N;j++) {a[i][j]=in.nextInt();}}vis=new boolean[N][N];vis[0][0]=true;if(dfs(0,0)==true){for(int i=0;i<q.size();i++){//注意我开始写的时候,假如用栈的话,你不可以poll哦,因为假如说是poll就会后面的先出来,顺序System.out.print(q.get(i));}}else {System.out.print(-1);}
}
}

最后一题:拔河

(说实话,真比JAVA最后一题简单一些,但是他也有难的地方,区间的一个排序很难,以及你暴力没办法解决)

纯暴力是肯定不能ac,估计也就通过6,7个例子,我们从暴力的过程中,学到优化才是核心目的。

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner in=new Scanner(System.in);int n=in.nextInt();long []a=new long[n+1];for(int i=1;i<=n;i++){a[i]=in.nextLong();}long[][]dp=new long[n+1][n+1];for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){//从i位置到j,i到j-1然后+1dp[i][j]=dp[i][j-1]+a[j];}}
//最后我们思考,他的区间一定是连续,并且不重叠的for(int i=0;i<=n;i++) {dp[0][i]=dp[i][0]=0x3f3f3f3f3f3f3f3fL;}long min=0x3f3f3f3f3f3f3f3fL;
//换句话,正确的话,就是暴力枚举,一个枚举左边的左端点,另一个枚举右端点,再来一个枚举右边的左端点,来一个枚举右边的右端点//左端点从左侧,开始最后的n,但是细想一下,左端点是否可以等于n,答案应该是不可以的,左端点的右端点也不该到n,右端点的左端点肯定不可以和那个是左端点的右连起来for(int i=1;i<n;i++){for(int j=i;j<n;j++){for(int t=j+1;t<=n;t++) {for (int k = t; k <= n; k++) {min = Math.min(Math.abs(dp[i][j ] - dp[t][k]), min);}}}}System.out.println(min);}
}

那么我们该如何优化呢?,

在这里引入数据结构

TheeSet:特点有序性,唯一性,插入删除查找都是O(logN)(内部是红黑)

first(返回数组中最小的元素)

last(返回数组中最大的元素)

higher(E e)返回集合中大于给定元素的最小元素

lower(E e):返回集合中严格小于给定元素的最大元素

ceiling(E e)返回集合中最小的大于或等于给定元素的元素

引入这个结构是为了让他有序,我们根据这个有序,随便来组合,不管他重复与否,全给他放入,

 Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();long[] a = new long[n + 1];for (int i = 1; i <= n; i++) {a[i] = scanner.nextInt();a[i] += a[i - 1];}TreeSet<Long> s = new TreeSet<>();//初始化一个很大数字long ans = 1000000000L;for (int i = 1; i <= n; i++) {for (int j = i; j <= n; j++) {//从1开始不断因为我们前缀和,所以需要不断减去a[i-1]的值,从a[1]-a[0],a[2]-a[0]...a[2]-a[1]...,不断求出不同位置的前缀和if (!s.contains(a[j] - a[i - 1])) {//假如s里面之前已经有了这个值,就说明两个数字相同,直接返回0就行s.add(a[j] - a[i - 1]);} else {System.out.println(0);return;}}}//此时已经把所有的数组都处理好了,然后我们需要做for (int i = 1; i < n; i++) {for (int j = 1; j <= i; j++) {//t会走到所有的元素,假如TreeSet里面有(你要是说有最大的,最大的你想找较小的,// 那么是否我们会找到较小的,然后找到最大的,所以不用去顾虑顺序啥的long t = a[i] - a[j - 1];// higher(E e)返回集合中大于给定元素的最小元素//我在思考一个问题假如说     a b c x y z    假如说a+b和b+c他俩相差最小的情况呢,那么是否ac就可以,b不用管//或者a b c   我们发现一个问题,假如出现重复的最小的情况,那么不需要重复的,换句话说 a+b 和b+c最小,其实不用看b,a和c最小//我思考的是什么(如何保证两个前缀和,之间没有重复元素,假如有重复元素不就不可以了吗,但是实际上两个出现重复就不需要看重复//这样一想,一切的2个连续子数组之和,求最小即可,有重复也可以(我重复的可以认为是把重复的去除)Long p = s.higher(t);if (p == null) {//假如没有比他大的,那就去找first(返回数组中最小的元素)
//这里就是需要处理一下边界条件,但是假如是空,返回任意一个即可,无需说是一定就firstp = s.first();}//没有比他大的,然后用t这个值减去p这个值ans = Math.min(ans, Math.abs(t - p));}}System.out.println(ans);

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

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

相关文章

matlab根据excel表头筛选表格数据

有如下表格需要筛选&#xff1a; 如果要筛选style中的A&#xff0c;color中的F2&#xff0c;num中的3。 代码如下&#xff1a; clear;clc; file_Pathstrcat(F:\csdn\,test1.xlsx); %表格路径、文件名 E1readtable(file_Path,Sheet,1); %读取表格中的字母和数字,1代表第一个…

day05(单片机高级)PCB基础

目录 PCB基础 什么是PCB&#xff1f;PCB的作用&#xff1f; PCB的制作过程 PCB板的层数 PCB设计软件 安装立创EDA PCB基础 什么是PCB&#xff1f;PCB的作用&#xff1f; PCB&#xff08;Printed Circuit Board&#xff09;&#xff0c;中文名称为印制电路板&#xff0c;又称印刷…

【机器学习】——朴素贝叶斯模型

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

【Android+多线程】异步 多线程 知识总结:基础概念 / 多种方式 / 实现方法 / 源码分析

1 基本概念 1.1 线程 定义&#xff1a;一个基本的CPU执行单元 & 程序执行流的最小单元 比进程更小的可独立运行的基本单位&#xff0c;可理解为&#xff1a;轻量级进程组成&#xff1a;线程ID 程序计数器 寄存器集合 堆栈注&#xff1a;线程自己不拥有系统资源&#…

Error: Invalid version flag: if 问题排查

问题描述&#xff1a; 国产化系统适配&#xff0c;arm架构的centos 在上面运行docker 启动后需要安装数据库 依赖perl 在yum install -y perl 时提示&#xff1a; “Error: Invalid version flag: if”

华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座

HDC2024华为重磅发布全自研操作系统内核—鸿蒙内核&#xff0c;鸿蒙内核替换Linux内核成为HarmonyOS NEXT稳定流畅新基座。鸿蒙内核具备更弹性、更流畅、更安全三大特征&#xff0c;性能超越Linux内核10.7%。 鸿蒙内核更弹性&#xff1a;元OS架构&#xff0c;性能安全双收益 万…

五种创建k8s的configMap的方式及configmap使用

configmap介绍 Kubernetes 提供了 ConfigMap 来管理应用配置数据&#xff0c;将配置信息从容器镜像中解耦&#xff0c;使应用更灵活、可移植。 1、基于一个目录来创建ConfigMap ​ 你可以使用 kubectl create configmap 基于同一目录中的多个文件创建 ConfigMap。 当你基于目…

如何将本地项目上传到gitee上

本地项目代码想上传到gitee管理、使用idea编辑器操作上传 新建仓库、填写信息 创建好了仓库&#xff0c;把HTTPS路径复制一下&#xff0c;之后会用到。 用命令进入项目进行git初始化 执行命令&#xff1a; cd 文件夹 git init 用idea把项目打开&#xff0c;然后配置一下gi…

大型语言模型LLM - Finetuning vs Prompting

资料来自台湾大学李宏毅教授机器学课程ML 2023 Spring&#xff0c;如有侵权请通知下架 台大机器学课程ML 2023 Springhttps://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.php2023/3/10 课程 機器如何生成文句 内容概要 主要探讨了大型语言模型的两种不同期待及其导致的两类…

Scikit-learn Pipeline完全指南:高效构建机器学习工作流

在机器学习工作流程中,组合估计器通过将多个转换器(Transformer)和预测器(Predictor)整合到一个管道(Pipeline)中,可以有效简化整个过程。这种方法不仅简化了数据预处理环节,还能确保处理过程的一致性,最大限度地降低数据泄露的风险。构建组合估计器最常用的工具是Scikit-learn…

kali Linux中foremost安装

记录一下 foremost工具介绍 foremost是基于文件开始格式&#xff0c;文件结束标志和内部数据结构进行恢复文件的程序。该工具通过分析不同类型文件的头、尾和内部数据结构&#xff0c;同镜像文件的数据进行比对&#xff0c;以还原文件。它默认支持19种类型文件的恢复。用户还可…

ChatGPT如何辅助academic writing?

今天想和大家分享一篇来自《Nature》杂志的文章《Three ways ChatGPT helps me in my academic writing》&#xff0c;如果您的日常涉及到学术论文的写作&#xff08;writing&#xff09;、编辑&#xff08;editing&#xff09;或者审稿&#xff08; peer review&#xff09;&a…

2024年11月26日Github流行趋势

项目名称&#xff1a;v2rayN 项目维护者&#xff1a;2dust yfdyh000 CGQAQ ShiinaRinne Lemonawa 项目介绍&#xff1a;一个支持Xray核心及其他功能的Windows和Linux图形用户界面客户端。 项目star数&#xff1a;70,383 项目fork数&#xff1a;11,602 项目名称&#xff1a;fre…

大数据面试SQL题-笔记02【查询、连接、聚合函数】

大数据面试SQL题复习思路一网打尽&#xff01;(文档见评论区)_哔哩哔哩_bilibiliHive SQL 大厂必考常用窗口函数及相关面试题 大数据面试SQL题-笔记01【运算符、条件查询、语法顺序、表连接】大数据面试SQL题-笔记02【查询、连接、聚合函数】​​​​​​​ 目录 01、查询 01…

Unity类银河战士恶魔城学习总结(P145 Save Skill Tree 保存技能树)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了技能树的保存 警告&#xff01;&#xff01;&#xff01; 如果有LoadData&#xff08;&#xff09;和SaveData(&#xff09;…

redmi 12c 刷机

刷机历程 一个多月前网购了redmi 12c这款手机, 价格只有550,用来搞机再适合不过了, 拆快递后就开始倒腾,网上有人说需要等7天才能解锁,我绑定了账号过了几天又忍不住倒腾,最后发现这块手机不用等7天解锁成功了,开始我为了获取root权限, 刷入了很火的magisk,但是某一天仍然发现/…

YOLO系列论文综述(从YOLOv1到YOLOv11)【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】

目录 1 前言2 YOLO在不同领域的应用3 物体检测指标和NMS3.1 mAP和IOU3.2 mAP计算流程3.2.1 VOC 数据集3.2.2 微软 COCO 数据集 3.3 NMS 1 前言 最近在做目标检测模型相关的优化&#xff0c;重新看了一些新的论文&#xff0c;发现了几篇写得比较好的YOLO系列论文综述&#xff0…

【通俗理解】步长和学习率在神经网络中是一回事吗?

【通俗理解】步长和学习率在神经网络中是一回事吗&#xff1f; 【核心结论】 步长&#xff08;Step Size&#xff09;和学习率&#xff08;Learning Rate, LR&#xff09;在神经网络中并不是同一个概念&#xff0c;但它们都关乎模型训练过程中的参数更新。 【通俗解释&#x…

STL之算法概览

目录 算法概览 算法分析与复杂度标识O() STL算法总览 质变算法mutating algorithms----会改变操作对象之值 非质变算法nonmutating algorithms----不改变操作对象之值 STL算法的一般形式 算法的泛化过程 算法概览 算法&#xff0c;问题之解法也。 以有限的步骤&#xff0…

华为IPD流程管理体系L1至L5最佳实践-解读

该文档主要介绍了华为IPD流程管理体系&#xff0c;包括流程体系架构、流程框架实施方法、各业务流程框架示例以及相关案例等内容&#xff0c;旨在帮助企业建立高效、规范的流程管理体系&#xff0c;实现业务的持续优化和发展。具体内容如下&#xff1a; 1. 华为流程体系概述 -…