2024第十五届蓝桥杯 JAVA B组

目录

  • 前言:
  • 试题 A: 报数游戏
  • 试题 B: 类斐波那契循环数
  • 试题C:分布式队列

前言:

没参加这次蓝桥杯算法赛,十四届蓝桥杯被狂虐,对算法又爱又恨,爱我会做的题,痛恨我连题都读不懂的题😭,十四届填空只做对一个,今天闲的蛋疼想看看这次比赛能做对几个。

暂时没找到题目,这是网上找的简略版,看了看就知道蓝桥杯前几道题就喜欢考数学思维和十四届一样

试题 A: 报数游戏

在这里插入图片描述

(简洁版) 从小到大排列是20或24倍数的正整数,前10个数依次是:”20 24 40 48 60 72 80 96 100 120“,求第202420242024个数是多少?(填空题)

解题思路:

最开始想的是求求它俩的最小公倍数是120发现没啥用,然后再发现24比20多4,也就是24向前叠加5次就整整多出来一个20,然后再在纸上画画发现了每10次一循环:

在这里插入图片描述

可以看出第10个数是24 * 5,第20个数是24 * 10,那么202420242024可以分成202420242020 + 4,最后发现偶数4也是24结尾,那么答案就是202420242024 / 2 * 24
在这里插入图片描述


试题 B: 类斐波那契循环数

在这里插入图片描述

(个人理解:) 将一个n位的数字按一定的规则排成一个数列。
规则:
这个数列的起始部分分别为该数字每一位上的数。例如:数字(12345)排成数列是【1,2,3,4,5】。
这个数列的其它部分分别为从当前数列的最后一位起,前n项的和。例如数字(12345,共5位)排成数列【1,2,3,4,5,(?),…】,此时数列的第6个数就是从当前数列的最后一位起前5项的和,即(1+2+3+4+5=15)【1,2,3,4,5,15】;第7个数就是从当前数列的最后一位起前5项的和,即(2+3+4+5+15=29)【1,2,3,4,5,15,29】;…
如果这个数列中包含这个数字本身,那么这个数就是类斐波那契循环数。
求从0~10^7范围中最大的类斐波那契循环数。(填空题)

解题思路:

仔细做了做例子发现:
在这里插入图片描述
发现有点像滑动窗口,求新数后窗口移动一下,所以想着将整个过程放在一个数组里,但是这样一整每次数组的长度都是不定的,不好定义数组的长度,且求到新数后,数组前面的区域就没用了,所以就想着能否用一个定长数组来做滑动窗口,且所有区域都用的上

分析一下上面例子求出新数15后第一个数1就对求下一个数29来说没用了,为什么不把15放在1的位置,以此类推29放在2的位置

在这里插入图片描述
这样就好整了,数组大小就等于数字的位数,还需要一个K指针在整个数组中循环移动用%Length就解决了

说实话这个灵感来源于我嵌入式对页面切换的处理…

最后看是怎么停止了,题目说了这个数列中包含这个数本身那么这个数就是类斐波那契循环数,因为每次求得得新数都是递增的,所以如果新数都大于原始数的话,那么说明这个数不是类斐波那契循环数

既然求类斐波那契循环数的整个逻辑模式都搞明白了,剩下就是用代码实现上述的功能需求了:

import java.util.*;

public class Main {
	static int END = 10000000;
	public static void main(String[] args) {
	  int MaxNumber = 0;
	  for(int i = 1; i <= END; i ++) {  // 由1开始
		  int Length = GetNumnberLength(i);
		  int Array[] = new int[Length];
		  NumbertoArray(Array, i);
		  int k = 0;
		  while(true) {
			  Array[k] = ListNumberSum(Array);
			  if(Array[k] == i || Array[k] > i) break;  // 要么是类斐波那契循环数要么不是
			  k = (k + 1) % Length;
		  }
		  if(Array[k] == i) {  // 是的话更新MaxNumber
			  if(MaxNumber <= i) {
				  MaxNumber = i;
			  }
		  }
	  }
	  System.out.println(MaxNumber);
	}
	public static int GetNumnberLength(int number) {
		int len = 0;
		while(number > 0) {
			len ++;
			number = number / 10;
		}
		return len;
	}
	public static void NumbertoArray(int array[], int number) {
		for(int i = array.length - 1; i >= 0; i --) {
			array[i] = number % 10;
			number = number / 10;
		}
	}
	public static int ListNumberSum(int array[]) {
		int sum = 0;
		for(int i = 0; i < array.length; i ++) sum = sum + array[i];
		return sum;
	}
}

其中while循环应该也循环不了几百次,整个时间复杂度应该等于10^7 * while循环次数,超过不了10^9复杂度,计算机一两秒就算出来了。

答案:在这里插入图片描述


以下试题全靠自己想法去做,可能有漏洞:

试题C:分布式队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解题思路:

先做例题,可以看出每个结点都可以当作一个独立的数组,在执行操作命令的时候对对应数组进行操作,add就是对主结点做添加操作,sync就是对对应副结点做操作,query就是输出情况

那么好怎么将具体的例子解法抽象成一般问题的解决逻辑呢,并且这个逻辑能较好用编程去实现?

首先分析到这个题有点像木桶的短板效应,即输出只需要关注最少元素的那个副结点即可,且主结点内装具体什么元素好像都不重要,重要的是装了几个元素

这样以来变成就简化成了一维数组,每个数组下标对应相应结点,数组对应值为同步的数的数量,只需关注最小的那个结点即可

代码:

import java.util.*;

public class Main {
	 
	public static void main(String[] args) {
	  Scanner sc = new Scanner(System.in);
	  int Number = sc.nextInt();  // 输入
	  String Temp = sc.nextLine();  // 吃空格
	  int Array[] = new int [Number];
	    while(sc.hasNext()){
		  String Command = sc.nextLine();
		  if(Command.charAt(0) == 'a') { 
			  Array[0] ++;  // add命令  
		  }else if(Command.charAt(0) == 'q') {
			  System.out.println(GetArrayMinNumber(Array));
		  }else {
			  String Split[] = Command.split("\\s+");
			  int Index =  Integer.parseInt(Split[1]);
			  if(Array[Index] < Array[0]) Array[Index] ++;  // 主节点还有多的元素才能同步
		  }
	    }
	}
	public static int GetArrayMinNumber(int array[]) {
		int MinOne = Integer.MAX_VALUE;
		for(int i = 0; i < array.length; i ++) {
			if(MinOne >= array[i]) MinOne = array[i];
		}
		return MinOne;
	}
}

注意:主节点没有多余的元素就不能同步给副结点了

例如:
2
sync 1
sync 1
add 11
add 22
query
输出为0而不是2

另外sc.hasNext是读到文件末尾会停,用while true停不下来

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础(持续更新~)

常见的Linux目录 1、“/”&#xff1a;根目录 2、“/root”&#xff1a;root 用户的家目录 3、“/home/username ”&#xff1a;普通用户的家目录 4、“/etc”&#xff1a;配置文件目录&#xff08;类似于Windows的注册表&#xff09; 5、“/bin ”&#xff1a;命令目录 …

不再写满屏import导入

密密麻麻的import语句不仅仅是一种视觉上的冲击&#xff0c;更是对代码组织结构的一种考验。 我们是如何做到让import“占领满屏“的了&#xff0c;又该如何优雅地管理这些import语句呢&#xff1f; 本文将从产生大量import语句的原因、可能带来的问题以及如何优化和管理impo…

java版数字藏品深色UI仿鲸探数藏盲盒合成短视频卡牌模式支持高并发

Java版数字藏品深色UI仿鲸探数藏盲盒合成短视频卡牌模式支持高并发&#xff0c;是一种结合了Java技术、深色用户界面&#xff08;UI&#xff09;设计、数字藏品概念、盲盒合成玩法以及短视频卡牌模式的综合性应用。该模式旨在为用户提供一种新颖、有趣的数字藏品体验&#xff0…

深度学习pytorch实战第P3周--实现天气识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 引言 1.复习上周 深度学习pytorch实战-第…

算法-反转单向链表

需求 思路 链表必有节点&#xff0c;节点两要素&#xff1a;当前元素值&#xff0c;下一个节点地址 import java.util.Scanner;// 定义一个单向链表 public class MyLinkedList<E> {int size 0;// 顶一个私有的内部类&#xff0c;表示链表的节点public class Node {E da…

pyinstaller后打开qt的exe报错Available platform

具体弹窗&#xff1a; 处理&#xff1a; 添加临时的环境变量&#xff1a; cd dir && set QT_PLUGIN_PATH.\platforms && XXX.exe

【JAVA基础篇教学】第十三篇:Java中I/O和文件操作

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十三篇&#xff1a;Java中I/O和文件操作。 理解 Java 中的 I/O&#xff08;输入/输出&#xff09;和文件操作对于开发各种类型的应用程序都至关重要。I/O 操作涉及从文件、网络或其他数据源中读取数据&#xff0c;以及…

动态数据源实现分表走shardingsphere,不分表走其他

shardingsphere从4.1.1升级到5.2.1但是还没有完结&#xff0c;因为在执行存储过程的时候&#xff0c;系统提示错误如下。shardingsphere是不支持存储过程呢&#xff0c;但项目中不能避免使用存储过程&#xff0c;因为有大量的数据需要初始化&#xff0c;这种情况该如何应对&…

Java反序列化Commons-Collections-CC1链

环境搭建 JDK8u71以下&#xff0c;这个漏洞已经被修复了&#xff0c;这个JDK的以上版本都修复了漏洞 JDK8u65 下载地址 https://www.oracle.com/cn/java/technologies/javase/javase8-archive-downloads.html这个时候来到 pom.xml 配置Maven依赖下载CommonsCollections3.2.…

UE5 GAS开发P31 将hud绑定在自己的角色上

在WidgetController内新建一个OverlayAuraWidgetController,然后修改HUD的初始状态 AuraHUD // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/HUD.h" #…

“Python+”集成技术高光谱遥感数据处理与机器学习深度应用

涵盖高光谱遥感数据处理的基础、python开发基础、机器学习和应用实践。重点解释高光谱数据处理所涉及的基本概念和理论&#xff0c;旨在帮助学员深入理解科学原理。结合Python编程工具&#xff0c;专注于解决高光谱数据读取、数据预处理、高光谱数据机器学习等技术难题&#xf…

亚马逊测评必看:全面剖析亚马逊测评,你不知道的那些事!

随着电商市场的拓展&#xff0c;曹哥今天针对测评小白们写一些入门知识&#xff0c;今天就带大家从内到外的亚马逊这个平台讲一讲 首先这个行业里分别有几个角色&#xff1a; 1.卖家&#xff1a;所有的服务基本上都是围绕着卖家来转 2.买家&#xff1a;也就是购买下单上评论…

GpuMall镜像社区上线啦!超值福利抢鲜体验!

想快速体验最新最优镜像&#xff1f;想随手分享你的原创镜像&#xff1f;想寻找一个交流镜像的优质平台&#xff1f;我们听到了广大友友们迫切的心声&#xff01; GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 现在&#xff01;我们的镜像社…

Rust腐蚀服务器插件安装教程

Rust腐蚀服务器插件安装教程 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师。之前教大家怎么搭建Rust腐蚀服务器&#xff0c;那么很多小伙伴在搭建完成后发现自己的游戏跟平台玩的还是有差别&#xff0c;其实这里主要缺少mod插件了。那么本期我们教一下大家mod插件…

跑腿平台隐藏服务用法,搭建平台这些跑腿服务也能做!

跑腿场景竞争愈发激烈激烈 事实上&#xff0c;跑腿行业早已群狼环伺&#xff0c;尽管跑腿领域仍有很大的发展空间&#xff0c;但新晋玩家都普遍把目光投向了外卖配送这个细分领域&#xff0c;难免会增加后来者的市场拓展和发展难度。那么&#xff0c;在跑腿服务行业中还有哪些…

Linux服务器磁盘扩容后,但是宝塔面板没有即使生效,以解决~!

前景描述&#xff1a;我是100G的磁盘&#xff0c;扩容到200G. 第一步查看服务器的当前磁盘 df -h 显示 99G&#xff0c;已经扩容了&#xff0c;但是服务器还没有更新信息。 第二步安装插件&#xff1a; yum install -y cloud-utils-growpart 第三步扩展分区&#xff1a; …

Java基础(变量)

什么是变量&#xff1f; 变量&#xff1a;在程序的执行过程中&#xff0c;其值有可能发生改变的量&#xff08;数据&#xff09; 变量的使用场景 当某个数据经常发生改变时&#xff0c;我们也可以用变量储存。当数据变化时&#xff0c;只要修改变量里面记录的值即可。 变量…

C++生成动态库,C++和C#以及Java在windows和linux调用

Windows生成dllC库 1、创建动态链接库项目 源文件编写函数 // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h"int sum(int a, int b) {return a b; }BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {switch…

C语言——字符函数和字符串函数

Hello&#xff0c;大家好&#xff0c;今天和大家分享C语言中的几个字符函数和字符串函数&#xff0c;记得三连支持一下哦&#xff01; 在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了⼀系列库函数…

54Max09116-源代码 刚出max的第一个版本

54Max09116-源代码 刚出max的第一个版本 参考资料&#xff1a; 54Max09116-源代码 刚出max的第一个版本_98999NET源码资源网