算法简单笔记2

5月26号,之前学了两天算法烦了,去学了几天鸿蒙,今天又回来看一下算法,距离6月1日国赛还有6天,哈哈真是等死咯......

一、蓝桥杯第13届国赛第1题填空题:重合次数

(半难不难,写编程难、手算就不难...)

思路:建议蓝桥杯填空题先不要从编程角度思考,直接算数学题,这题手算就行了,别编程......

什么时候分针秒针会相遇?很明显:分针指的数 = 秒针指的数,这时候会重合相遇

那么每一分钟,秒针要转1圈,就会跟分针相遇1次

那么一小时,分针只转1圈,秒针转60圈,按道理就可能会相遇60次

但是留意,在【59分】到【60分】这一分钟里,会在一分钟里分针秒针重合2次

所以实际上一小时里,分针秒针相遇次数应该是59次

那么只要把【秒针转动总圈数】-【小时数】就得出【分针秒针相遇次数】了

(还要判断一下最后的【秒针指的数】跟【分针指的数】是否一样,一样就+1,不一样就不管)

二、蓝桥杯第13届国赛第2题填空题:数数

(中等偏难)

这题我脑子卡屎,算了一下午,其实这里我陷入了几个误区,这里提出来以防大家做题时跟我一样:

( 懒得看前面逻辑解释这些废话的,直接跳到目录下面——"多看几个例子就明白了:"

首先我们通过找规律能知道,一个数要求出它的质因子,就是通过不断除 “从2到这个数本身” 的数(而且要是素数才是质因子,才可以作为除数),然后每次除完的得数就是下一次计算的被除数,直到这个除法的结果是 “1” 为止,最后所有这些可以整除的除数都是质因子,例子:

260 / 2 = 130

130 / 2 = 65

65 / 2有余数、65 / 3有余数、65 / 4有余数、65 / 5 = 13

13 / 2有余数、13 / 3有余数、13 / 4有余数......直到 13 / 13 = 1

此时得数是 “1”,说明13自身就是一个质因子

因此除法到此为止,质因子是【2、2、5、13】

画图:

第一个误区

第一个误区就是来自上面的规律,质因子除数不需要每次都判断是不是素数

(因为记住【埃式筛法】和【欧拉筛法】求素数的定律:素数的倍数绝对不是素数!!!

也就是说,当我们当我们用上面的公式不断往下除的时候,被除数只会被素数的除数先除掉,因为不是素数的话早就在前面被素数分解了,不可能成为除数,例如:

260 / 2 = 130   2是素数

130 / 2 = 65     2是素数

65 / 2有余数不行,除数找下一个

65 / 3有余数不行,除数找下一个

65 / 4,4不是是素数,而且4已经被前面的两个素数“2”分解了,所以不可能让4成为除数

65 / 5 = 13      5是是素数

13 / 2有余数不行,除数找下一个

13 / 3有余数不行,除数找下一个

13 / 4,4不是是素数,而且4已经被前面的两个素数“2”分解了,所以不可能让4成为除数

......直到 13 / 13 = 1     13是素数

因此根本无需另写循环去判断这个【除数】是不是素数,之所以能作为质因子,就是因为质因子只能是素数,而通过这种不断地除法,只会自动得到素数的除数

第二个误区

不需要每次都从最小素数的2来作为当前除法公式的最小除数

因为当2除不了的时候就说明没得分解2了,只能分解下一个素数;那么下一次除法计算的除数直接拿上一次除法的除数,如果不行,再在这个除数的基础上+1,找下一个素数当除数,例子:

第三个误区

除了一直除到得数为 “ 1 ” 来求得所有质因子;还可以直接【判断除数的平方大于被除数时,这个被除数就是最后一个可分解的质因子

根据【埃式筛法】和【欧拉筛法】求素数的定律:素数的倍数绝对不是素数!!!

那么我们如果要在一个范围里找素数,可以先从2开始,然后把2的倍数全部筛选出去;

然后从3开始,把3的倍数全部筛选出去......

但是!注意!!以这个数为倍数进行筛选前,要判断这个数的平方是否大于当前序列最大的数,如果是,那么不用再筛选,当前序列剩下的所有数都是素数

别问为什么,我当初学的时候也不明白,你只需要记得是这么回事就行了,例子:

假设求【2 ~ 24】之间的素数,原始序列为:

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

2素数为基础,筛选为2的倍数的数,2^2=4 <= 【24】可以筛选

2  3  4  5   7   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23 【24

2  3  5  7  9  11  13  15  17  19  21【23

然后以3素数为基础,筛选为3的倍数的数,3^2=9 <= 【23】,可以筛选

2  3  5  7  9  11  13  15  17  19  21 23

2  3  5  7  11  13  17  19 【23

然后以5素数为基础,筛选为5的倍数的数,5^2=25 > 【23】,不可以筛选了!!!

所以【2 ~ 23】之间的素数是:2  3  5  7  11  13  17  19  23

那么换回到我们的题,虽然表面上看跟上面这个规则没有什么关系,但是我们细细分析,当我们不断用除法除下去,除到【当除数的平方大于被除数】的时候,就说明这个【被除数是最后一个质因子(素数)了,就是我们上面的规则,我们还是举例说明:

假设一开始序列是:【2  3  4  5  6 ...... 260

先判断:2^2=4 < 260

260 / 2 = 130

此时序列是:【2  3  5  ...... 130

130 / 2 = 65

此时序列是:【2  3  5 ...... 65

65 / 2不行,那么找下一个可整除的质因子

先判断:3^2=9 < 65

65 / 3不行,那么再找下一个可整除的质因子

先判断: 5^2=25 < 65         

65 / 5 = 13         

此时序列是:【2  3  5 ...... 13

13 / 5不行         

先判断:5^2=25 > 13

那么就不用往下分解了

那么就可以理解为,照这样求质因子的除法除下去,会在筛选出素数同时缩小最大数的范围

先以2为素数基础,筛选出2的倍数的数,同时把最大数范围不断缩小到65

再以5为素数基础,筛选出5的倍数的数,再把最大数的范围缩小到13

然后此时可暂时理解为【从2到......13的范围】筛选素数,但是5^2=25 > 13最大数,那就不用再筛选了

(当然我只是为了结合之前【埃式筛法】和【欧拉筛法】求素数的规则才这么说的,实际上【2到13】的素数是【2 3 5 7 13】,但是质因子是【2 2 5 13】)

总结:

当然你不愿意按照上面这么多废话来理解,那你就记住这三句话:

1、分解一个数的质因子,就从2开始不断往下除,每次除法中,可以整除的素数除数都是质因子

2、第一种情况是:一直除,除到最后得数是 “ 1 ”,那么这个 (被除数or除数) 就是最后一个质因子

3、第二种情况是:(除了1)当除数的平方大于被除数的时候,这个被除数就是这个序列最后一个质因子。

多看几个例子就明白了:

完整代码:(含详细注释)

public class 国赛_数数 {public static void main(String[] args){//这是统计一个数有几个质因子int count = 0;//这是统计【2333333 ~ 23333333】之间有几个数的质因子是12个int ans = 0;for (int i = 2333333; i <= 23333333; i++) {//首先让【2333333 ~ 23333333】的每一个数是“分解质因子的除法公式”的初始“被除数”int beichushu = i;//除数就从第一个最小的素数2开始int chushu = 2;//记得每次分解完一个数的质因子,要把count归零count = 0;//还要判断这个数的质因子是否超过12个了,超过去就舍弃、不要再循环下去boolean flag = true;//注意!注意!注意!外层循环这两个条件的意思是://1、beichushu!=1,【除数 != 被除数】,就是还没除完// 当【除数 == 被除数】了,被除数 / 除数 = 1,那就除完了结束了(前面所有可以整除的除数都是质因子)//2、chushu*chushu <= beichushu,【除数的平方 <= 被除数】,就是除数还可以递增找下一个合适的质因子// 当【除数的平方 > 被除数】时,除数就不要递增了(因为这个被除数就是最后一个质因子了,它已经没有质因子了)while ( beichushu!=1  &&  chushu*chushu <= beichushu ){//然后这个循环才是【真正】进行除法公式分解质因子的循环//只要当前这个【除数】可以【整除被除数】的时候,就会一直除下去//直到这个【除数】不可以【整除被除数】时,退出循环,找下一个合适质因子作除数while ( beichushu%chushu==0 ){count++;//符合一切条件,又可以整除,就统计+1质因子//但是题目要的是12个质因子,多了就不符合要求if(count > 12){flag = false;break;}//除法公式分解质因子beichushu /= chushu;}//这里留意,超出12个质因子不符题意时,不只是退出里层的除法循环//而是要退出两层循环,直接排除这个数,i遍历下一个数if(!flag){break;}//当这个【除数】不可以【整除被除数】时,就找下一个合适质因子作除数chushu++;}//如果是第一种情况,那么就是因为因为上面循环的条件,除法公式没有除完//但是其实它不用分解,因为它自己本身就是最后一个质因子,所以得加上它if(beichushu != 1){count++;//那就加上它}//当i遍历【2333333 ~ 23333333】内的这个数分解出了12个质因子//那就把【含12个质因子】的统计数+1if (count == 12){ans++;}}System.out.println(ans);}
}

(简略无注释版)

三、蓝桥杯第13届国赛编程第1题(简单)

我做烦了,就直接暴力搜索排列,【不确定】能否过大范围数据的循环,有好办法或者觉得有问题的可以私信我,这里我就直接放暴力搜索了,没什么好讲解的,大不了不要这几分了

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;//输入样例:
//5 3
//L 3
//L 2
//R 1
//输出样例:
//2 3 4 5 1 public class test {public static void main(String[] args){Scanner in = new Scanner(System.in);int N = in.nextInt();int M = in.nextInt();List<Integer> list = new ArrayList<>();for (int i = 0; i < N; i++) {list.add(i+1);}in.nextLine();for (int i = 0; i < M; i++) {String s = in.nextLine();String number = s.substring(2);int num = Integer.parseInt(number);//数字放左边开头,那就数组右移if(s.charAt(0)=='L'){for (int j = 0; j < list.size(); j++) {if(list.get(j) == num){for (int k = j; k > 0; k--) {list.set(k,list.get(k-1));}break;}}list.set(0,num);}else{//放右边开头,那就数组左移for (int j = 0; j < list.size(); j++) {if(list.get(j) == num){for (int k = j; k < list.size()-1; k++) {list.set(k,list.get(k+1));}break;}}list.set(list.size()-1,num);}}for (Integer integer : list) {System.out.print(integer + " ");}}
}

过两天更新下面的题,太多逼事了

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

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

相关文章

探索演进:了解IPv4和IPv6之间的区别

探索演进&#xff1a;了解IPv4和IPv6之间的区别 在广阔的互联网领域中&#xff0c;设备之间的通信依赖于一组独特的协议来促进连接。前景协议中&#xff0c;IPv4&#xff08;Internet 协议版本 4&#xff09;和 IPv6&#xff08;Internet 协议版本 6&#xff09;是数字基础设施…

内存泄漏案例分享3-view的内存泄漏

案例3——view内存泄漏 前文提到&#xff0c;profile#Leaks视图无法展示非Activity、非Fragment的内存泄漏&#xff0c;换言之&#xff0c;除了Activity、Fragment的内存泄漏外&#xff0c;其他类的内存问题我们只能自己检索hprof文件查询了。 下面有一个极佳的view内存泄漏例子…

OrangePi AIpro开箱测评

OrangePi AIpro(8T) 香橙派联合华为精心打造&#xff0c;建设人工智能新生态 章节一&#xff1a;引言 1.1 背景 香橙派&#xff08;OrangePi&#xff09;是深圳市迅龙软件有限公司旗下开源产品品牌&#xff0c;迅龙软件成立于2005年&#xff0c;是全球领先的开源硬件和开源软…

初识C语言——第二十九天

数组 本章重点 1.一维数组的创建和初始化 数组的创建 注意事项&#xff1a; 1.一维由低数组在内存中是连续存放的&#xff01; 2.随着数组下标的增长&#xff0c;地址是由低到高变化的 2.二维数组的创建和初始化 注意事项&#xff1a; 1.二维数组在内存中也是连续存放的&am…

YOLOv8+PyQt5面部表情检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

1.资源包含可视化的面部表情检测系统&#xff0c;基于最新的YOLOv8训练的面部表情检测模型&#xff0c;和基于PyQt5制作的可视化面部表情检测系统&#xff0c;包含登陆页面、注册页面和检测页面&#xff0c;该系统可自动检测和识别图片或视频当中出现的八类面部表情&#xff1a…

211大学计算机专业不考408,新增的交叉专业却考408!南京农业大学计算机考研考情分析!

南京农业大学信息科技学院可追溯至1981年成立的计算中心和1985年筹建的农业图书情报专业。1987年设立了农业图书情报系&#xff0c;1993 年农业图书情报系更名为信息管理系&#xff0c;本科专业名称也于1999年更名为信息管理与信息系统专业。1994年计算中心开始招收计算机应用专…

开源网页视频会议,WebRTC音视频功能比较

1. 概述 OpenAI 发布了新一代旗舰生成模型 GPT-4o,这是一款真正的多模态大模型,可以「实时对音频、视觉和文本进行推理」。 支持与 AI 实时语音对话,且响应时间达到毫秒级;交互中可识别人类情绪并以相应的情感做出回应;多语言能力的提升,WebRTC 成为大模型关键能力。 视频会议…

theharvester一键收集域名信息(KALI工具系列十)

目录 1、KALI LINUX简介 2、theharvester工具简介 3、在KALI中使用theharvester 3.1 用搜索引擎扫描 3.2 扫描并输出结果 3.3 扫描某域名下的所有账号 3.4 使用所有的搜索引擎扫描 4、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版&…

【Docker学习】详细讲解docker ps

docker ps是我们操作容器次数最多的命令之一&#xff0c;但我们往往使用docker ps或是docker ps -a&#xff0c;对于该命令的其它选项&#xff0c;我们关注比较少。那么这一讲&#xff0c;我给大家详细讲讲该命令的全部方法。 命令&#xff1a; docker container ls 描述&am…

前后端项目部署和解决跨域

文章目录 一.前端项目部署1.1 上传前端文件1.2 项目部署1.3 解决跨域1.3.1 什么是跨域1.3.2 配置文件 二.后端项目部署2.1 上传后端文件2.2 项目部署2.3 解决跨域 一.前端项目部署 1.1 上传前端文件 站点创建好了&#xff0c;进入到站点的目录。 然后把它默认的文件删掉。 你…

2024.5.22 关于 SpringCloud —— Nacos 配置管理

目录 Nacos 配置统一管理 Nacos 配置热部署 Nacos 多环境配置共享 配置优先级 Nacos 配置统一管理 实例理解 我们想要利用 Nacos 在 user-service 的 application.yml 配置文件中新增配置项此处我们将新增配置日期格式为 yyyy-MM-dd HH:mm:ss下图为新增 Nacos 配置统一管理…

Redis篇 String

String概念和set,get扩充 一. String类型的基本介绍二. String中set,get方法扩充 一. String类型的基本介绍 redis中所有的key都是字符串类型的,但是value的类型差异很大. redis中的字符串,直接就是二进制方式存储的,可以存储整数,二进制数据 文本数据,Json,xml还有音频等. 二.…

工作中写单片机代码,与学校里有什么不同?

来聊聊我的经历&#xff0c;提供几个提升方向&#xff0c;亲测有效&#xff0c;希望能让你少走几年弯路。 10几年前&#xff0c;还没参加工作的时候&#xff0c;主要是玩玩开发板&#xff0c;也接触不到实际产品的代码&#xff0c;很好奇那些产品级的代码是怎样的。 第一份工作…

06_Tomcat

文章目录 Tomcat1.概念2.Tomcat安装3.Tomcat项目结构4.标准web项目结构5.Tomcat部署项目方式6.IDEA关联Tomcat6.1 构建tomcat和idea关联6.2 使用idea创建一个Javaweb工程6.3 使用idea将工程**构建**成一个app6.4 使用idea将构建好的app**部署**到tomcat中 Tomcat 1.概念 Tomc…

进程信号(2)

一、信号的处理 进程对应信号的处理的一般步骤就是&#xff1a;先去遍历pending位图&#xff0c;找到比特位为1的位置对应的信号&#xff0c;然后再去检测block位图对应位置的比特位是否为1。若不为1&#xff0c;就hander表的对应位置去调用信号的处理动作函数&#xff0c;若为…

JS入门学习

JS JavaScript是一门解释型的脚本语言&#xff0c;其是弱类型的&#xff0c;对变量的数据类型不做严格的要求&#xff0c;变量的类型可以在运行过程中变化 JavaScript能改变HTML内容&#xff0c;属性&#xff0c;样式 大纲 使用方式变量运算符数组JS函数自定义对象事件补充 …

mysql中InnoDB的表空间--独立表空间

大家好&#xff0c;上篇文章我们在讲mysql数据目录的时候提到了表空间这个名词&#xff0c;它是一个抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为表名.ib…

node.js学习P3-P10

P3 npm package.json&#xff08;package解读npm工具换镜像源&#xff09; 一个package.json文件可以的作用 作为一个描述文件&#xff0c;描述了你的项目依赖哪些包 &#xff0c;用来干什么的允许我们使用“语义版本规则”&#xff0c;指明你项目依赖的版本让你的构建更好的…

Java绩效考核系统源码 springboot员工绩效考核系统源码

Java绩效考核系统源码 springboot员工绩效考核系统源码-009 源码下载地址&#xff1a;https://download.csdn.net/download/xiaohua1992/89352195 项目介绍 本系统的功能分为管理员和员工两个角色 管理员的功能有&#xff1a; &#xff08;1&#xff09;个人中心管理功能&a…