算法简单笔记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个质因子】的统计数+1
            if (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 + " ");
        }
    }
}

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

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

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

相关文章

张大哥笔记:赚钱高手养成计划---如何将一份时间产生N份收入?

我们常说的赚钱的四种境界有哪些&#xff1f; 1.靠体力挣钱 2.靠技能挣钱 3.靠知识挣钱 4.靠平台钱生钱 所以对应的收入的模式就会是下面4种模式&#xff1a; 1.一份时间卖1次 2.一份时间卖N次 3.一份时间溢价卖N次 4.购买他人时间为自己所用 时间对于每个人都是相同的…

vs code怎么补全路径,怎么快捷输入文件路径

安装插件&#xff1a; 链接&#xff1a;https://marketplace.visualstudio.com/items?itemNamejakob101.RelativePath 使用 按住 Ctrl Shift H&#xff0c;弹出窗口&#xff0c;输入文件补全&#xff0c;回车就可以了 排除文件 如果你的项目下文件太多&#xff0c;它会…

Java单元测试

单元测试一 一、单选题 1 public class Test{public static void main(String[] args){int i1;switch(i){case 0:System.out.println("1"(i));case 1:System.out.println("2"(i));break;case 2:System.out.println("3"(i));default…

【程序员如何送外卖】

嘿&#xff0c;咱程序员要在美团送外卖&#xff0c;那还真有一番说道呢。 先说说优势哈&#xff0c;咱程序员那逻辑思维可不是盖的&#xff0c;规划送餐路线什么的&#xff0c;简直小菜一碟。就像敲代码找最优解一样&#xff0c;能迅速算出怎么送最省时间最有效率。而且咱平时…

雷军-2022.8小米创业思考-9-爆品模式:产品力超群,具有一流口碑,最终实现海量长销的产品。人人都向往;做减法;重组创新;小白模式

第九章 爆品模式 小米方法论的第三个关键词&#xff0c;就是一切以产品为出发点&#xff0c;打造爆品模式。 大多数人对“爆品”的着眼点仅在于“爆”&#xff0c;也就是产品卖得好。希望产品大卖这没有错&#xff0c;但是“爆”是“品”的结果&#xff0c;爆品是打造出来的&…

内网穿透--Frp-简易型(速成)-上线

免责声明:本文仅做技术交流与学习... 目录 frp项目介绍: 一图通解: ​编辑 1-下载frp 2-服务端(server)开启frp口 3-kali客户端(client)连接frp服务器 4-kali生成马子 5-kali监听 6-马子执行-->成功上线 frp项目介绍: GitHub - fatedier/frp: A fast reverse proxy…

react 下拉框内容回显

需要实现效果如下 目前效果如下 思路 : 将下拉框选项的value和label一起存储到state中 , 初始化表单数据时 , 将faqType对应的label查找出来并设置到Form.Item中 , 最后修改useEffect 旧代码 //可以拿到faqType为0 但是却没有回显出下拉框的内容 我需要faqType为0 回显出下拉…

超详细避坑指南!OrangpiAIPro转换部署模型全流程!

目录 OrangepiPro初体验 前述&#xff1a; 一、硬件准备 二、安装CANN工具链&#xff08;虚拟机&#xff09; 三、配置模型转换环境&#xff08;虚拟机&#xff09; 1.安装miniconda 。 2.创建环境。 3.安装依赖包 四、转换模型 1. 查看设备号&#xff08;开发板&…

【AD21】坐标文件的输出

坐标文件通常发给贴片厂&#xff0c;该文件提供了每个元件、每个测试点等在PCB上的精确位置&#xff0c;可以用于指导和优化PCB制造和组装过程中元件和孔位的精确定位。 在PCB源文件页面&#xff0c;菜单栏中点击文件->装配输出->Generates pick and place files。 在新…

【搜索方法推荐】高效信息检索方法和实用网站推荐

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

【软件设计师】——9.UML建模

目录 9.1概述 9.2 结构图 9.2.1 对象图 9.2.2 类图 9.2.3 构件/组件图 9.2.3 部署图 9.2.4 制品图 9.2.5 组合结构图 9.3 行为图 9.3.1 用例图 9.3.2 协作图 9.3.3 顺序/序列/时序图 9.3.4 活动图 9.3.5 状态图 9.3.6 通信图 9.4 交互图 9.1概述 基本概念 UML统…

30.哀家要长脑子了!---栈与队列

1.388. 文件的最长绝对路径 - 力扣&#xff08;LeetCode&#xff09; 其实看懂了就还好 用一个栈来保存所遍历过最大的文件的绝对路径的长度&#xff0c;栈顶元素是文件的长度&#xff0c;栈中元素的个数是该文件目录的深度&#xff0c;非栈顶元素就是当时目录的长度 检查此…

2.冒泡排序

样例输入 5 8 3 6 4 9 样例输出 3 4 6 8 9 以下是解题答案&#xff1a; class demo1{public static void main(String[] args) {Scanner scnnew Scanner(System.in);int[] array new int[scn.nextInt()];if(array.length>0&&array.length<200){for(int…

“按摩”科技?

都说A股股民是特别善于学习的&#xff0c;这不市场又现新概念——“按摩科技”&#xff0c;成立仅6年&#xff0c;把上门按摩干到35亿营收也是没谁了&#xff0c;现在号称有1000万用户&#xff0c;3万家入驻商户数的按摩平台&#xff0c;难道就凭借2.5万名女技师&#xff0c;活…

数据库|基于T-SQL创建数据表(练习笔记)

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 前边学习了如何用T-SQL创建数据库《数据库|基于T-SQL创建数据库》 今天继续学习基于T-SQL在数据库中创建数据表。 以下为学习笔记。 01 创建Author数据表 创建一个作者表&#xff0c;表名称为Author,包含作者编号&am…

SARscape5.7已经支持3米陆探一号(LT-1)数据处理

SARsacpe5.6.2.1版本已经开始支持LT-1的数据处理&#xff0c;由于当时只获取了12米的条带模式2&#xff08;STRIP2&#xff09;例子数据&#xff0c;对3米条带模式1&#xff08;STRIP1&#xff09;数据的InSAR处理轨道误差挺大&#xff0c;可能会造成干涉图异常。 SARsacpe5.7最…

Go程序出问题了?有pprof!

什么情况下会关注程序的问题&#xff1f; 一是没事儿的时候 二是真有问题的时候 哈哈哈&#xff0c;今天我们就来一起了解一下Go程序的排查工具&#xff0c;可以说即简单又优雅&#xff0c;它就是pprof。 在 Go 中&#xff0c;pprof 工具提供了一种强大而灵活的机制来分析 …

【ARMv8/v9 异常模型入门及渐进 10 -- WFI 与 WFE 使用详细介绍 1】

请阅读【ARMv8/v9 ARM64 System Exception】 文章目录 WFI 与 WFE等待事件&#xff08;WFE&#xff09;发送事件&#xff08;SEV&#xff09;本地发送事件&#xff08;SEVL&#xff09;WFE 唤醒事件 WFE 使用场景举例与代码实现wfe睡眠函数sev 事件唤醒函数全局监视器和自旋锁 …

推荐丨免费一年期SSL证书在哪里可以申请到?

当然&#xff0c;申请HTTPS证书的流程可以简化为三个主要步骤&#xff0c;以便理解&#xff1a; 第一步&#xff1a;选择证书类型和认证机构 1. 确定证书类型&#xff1a;首先&#xff0c;你需要确定适合你网站的SSL证书类型。常见的有三种&#xff1a; - 域名验证型&#xff0…

Ubuntu执行命令出现乱码,菱形符号

1、问题描述 如题&#xff0c;Ubuntu执行命令出现乱码&#xff0c;菱形符号&#xff08;见下图&#xff09;&#xff1a; 2、解决办法 export LC_ALLC 再运行就好了