蓝桥杯练习题2

动态规划

动态规划三大题型:计数问题、最值问题、存在性问题;

【最小权值】-- 最值问题

【题目分析】

import java.util.Arrays;

Arrays类中的一个方法:Arrays.fill(int[] m,int n)

//给 int 类型(或者char类型/Long类型...)的数组全部空间填充上数字 n ;

Arrays.fill(int[] m,int start_index,int end_index,int n)

//在数组 m 的 start_index(包含该起始索引,可以取0)到 end_index(不包含该索引,最大到m.length) 填充数字n ; 

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
import java.util.Arrays;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//从0-2021long[] dp = new long[2022];//dp储存的是不同结点数量时的最小权值Arrays.fill(dp,-1);//空子树权值是0 无根节点dp[0] = 0;//dp[1]是有一个结点(根结点)的最小权值dp[1] = 1;//i是该树所有结点的个数//i从2到2021for(int i=2;i<dp.length;i++){long min = Long.MAX_VALUE;//j=left 是该树左结点的个数//i-j-1=right 是该树的右结点for(int j=0;j<i;j++){int left = j;int right = i - j - 1;  //1是根节点long temp = 1 + 2*dp[left] + 3*dp[right] + left*left*right;min = Math.min(min,temp);}dp[i] = min;}System.out.println(dp[2021]);scan.close();}
}
【砝码称重】-- 计数问题

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int num = 0;//代表重量的种类//题目有提示N的范围[1,100] 总重量不超过100000int N = scan.nextInt();int[] w = new int[101];  //使用w[1]到w[100]//默认全是false;boolean[][] dp = new boolean[101][100001];   //使用[1...100]和[1...100000]  long weight = 0L;for(int i = 1;i< N+1;i++){//初始化w[1]到w[N]w[i] = scan.nextInt();weight+=w[i];//所有情况中最大的砝码重量}/*核心代码*///放第i个砝码 i=1...Nfor(int i=1;i<N+1;i++){for(int j=1;j<=weight;j++){if(j==w[i]){dp[i][j] = true;  //能够称出的重量赋T;//dp[0][1...max]在初始化的时候默认是F;}else{//设定放左边总重量减少 右边总重量增加//前 i 个砝码可以不可以称出 j ?考虑以下情况//1.如果dp[i-1][j]=T;上一个砝码已经可以称出 j 这个重量; 第 i 个砝码不放了;//2.dp[i-1][abs(j-w[i])];上一个砝码(前i-1个)已经可以称出 j-w[i] ,那么第i个砝码(放右边)就可以称出 j 重量。dp[i][j]=T; //3.dp[i-1][j+w[i]];上一个砝码(前i-1个)已经可以称出 j+w[i],那么第i个砝码(放左边)就可以称出 j 重量,dp[i][j]=T; dp[i][j] = dp[i-1][j] || dp[i-1][Math.abs(j-w[i])] || dp[i-1][j+w[i]];}}}for(int i=1;i<=weight;i++){if(dp[N][i]){num++;}}System.out.println(num);scan.close();}
}
【序列】

 

package test;import java.math.BigInteger;
import java.util.HashSet;
import java.util.Scanner;
import java.util.*;
import java.lang.*;public class test2 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int N = scan.nextInt();int[] a = new int[N];int[] b = new int[N];int[] S = new int[N + 1];int sum = 0;for (int m : a) {m = scan.nextInt();}for(int i=0;i<N;i++) {a[i]=scan.nextInt();}int num = 0;// 首项&公差=jfor (int j = 1; j < N + 1; j++) {b[0] = j;//初始化数组bfor (int k = 1; k < N; k++) {b[k] = b[k - 1] + j;}for (int i = 0; i < N; i++) {if (b[i] % a[i] == 0) {num++;}}S[j] = num;num=0;}sum = 0;for (int i = 1; i < N + 1; i++) {sum += S[i];}System.out.println(sum);scan.close();}
}


【出栈次序】

n 个元素有多少种出栈顺序? 

public class Main {// 不用管出站后车的数量和顺序,因为进站顺序和出站顺序已经决定出站时的排序static int fun(int a, int b) {// a是等待进站的数目,b是站中的数目if (a == 0)// 此时已全部进站,出站时的顺序只有一种return 1;if (b == 0)// 此时车站为空,只能让车进站return fun(a - 1, 1);// 有两种走法:1、让一辆车进站 ;2、让一辆车出站return fun(a - 1, b + 1) + fun(a, b - 1);}static int fun(int a) {return fun(a, 0);}public static void main(String[] args) {System.out.println(fun(16));}
}

出栈顺序问题讲解 蓝桥杯_出栈序列-CSDN博客   请参考!

卡特兰数Catalan numbers

经典使用场景

1.合法的括号序列

2.二叉树形态计数

3.栈的出栈顺序

4.不同弦的相交

5.Dyck路径

6.凸多边形的三角划分

7.非交叉集合的划分

5. 卡特兰数(Catalan)公式、证明、代码、典例.-CSDN博客   参考!

//函数功能: 计算Catalan的第n项
//函数参数: n为项数
//返回值:  第n个Catalan数
int Catalan(int n)
{if(n<=1) return 1;int *h = new int [n+1]; //保存临时结果h[0] = h[1] = 1;        //h(0)和h(1)//第i项Cifor(int i=2;i<=n;++i)    //依次计算h(2),h(3)...h(n){h[i] = 0;for(int j = 0; j < i; j++) //根据递归式计算 h(i)= h(0)*h(i-1)+h(1)*h(i-2) + ... + h(i-1)h(0)h[i] += (h[j] * h[i-1-j]);}int result = h[n]; //保存结果delete [] h;       //注意释放空间return result;
}

【居中输出】

//暴力解法import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {static int num(int m){int  n = 0;//在计算数字的位数的时候需要考虑0 否则测试用例只能通过90%if(m==0){return 1;}while(m>0){m/=10;n++;}return n;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int count = (10-num(n))/2;if(num(n)+count*2==10){for(int i=0;i<count;i++){System.out.printf("%c",'=');}System.out.printf("%d",n);for(int i=0;i<count;i++){System.out.printf("%c",'=');}}else{for(int i=0;i<count+1;i++){System.out.printf("%c",'=');}System.out.printf("%d",n);for(int i=0;i<count;i++){System.out.printf("%c",'=');}}        scan.close();}
}
【平方十位数】 

import java.math.BigInteger;
import java.util.Scanner;
public class Main {static boolean sqrt_num1(long m) {// 不遗漏String s = m + "";int len = s.length();if (len != 10) {return false;}// 不重复:各个数位上的数字不重复int[] num = new int[10];for (int i = 0; i < 10; i++) {num[i] = 0;}while (m > 0) {//注意格式 (int)m%10  是把long型的数字限制在int的范围内 //而不是把(m%10)的结果由long转换为 intint last = (int) (m % 10);    num[last]++;m /= 10;if (num[last] > 1) {return false;}}return true;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 9876543210最大的数
//	        long big = 9876543210L;
//	        long a = (long) Math.sqrt(big);
//	        System.out.println(a);  //a=99380;int flag = 0;for (long i = 99380; i > 0; i--) {long t = i * i;if (sqrt_num1(t)) {System.out.println(t);flag = 1;break;}if (flag == 1) {break;}}scan.close();}
}
【神奇六位数】

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {//辅助boolean数组a[]static int[] six_num(int m){int[] arr = new int[10];for(int i=0;i<10;i++){arr[i] = 0;}while(m>0){int last =m%10;arr[last]++;m/=10;}return arr;} static boolean eq(int[] a,int[] b){for(int i=0;i<10;i++){if(a[i]!=b[i]){return false;}}return true;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);//神奇六位数int start = 100000;int i=start;while(i<166666){int[] temp = six_num(i).clone();int j=2;int count = 0;while(j<7){int num = i*j;
//            String str = num+"";
//            //乘积的位数不是6位数
//            if(str.length()!=6){
//              j=8; //跳出循环
//            }int[] arr = six_num(num).clone();if(eq(temp,arr)){j++;count++;}else {j=8;}}//不符合条件if(j==8){i++;}//正常跳出循环j==7if(j==7){System.out.println(i);i=166667;break;}}scan.close();}
}
 【前缀判断】

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {static String start_with(String a,String b){//是否 a 包含了 b if(a.startsWith(b)){return a;}else{return "";}}static void test(String a,String b){String p =start_with(a,b);if(p==""&&b!=""){System.out.printf("[NO]\n");}else{System.out.printf("|%s|\n",p);  }} public static void main(String[] args) {Scanner scan = new Scanner(System.in);test("abcd","abc");test("abcd","acb");test("abcd","abcd");test("abcd","abcd");test("","abc");test("","");scan.close();// System.out.println("".startsWith("abc"));}
}

startsWith(String s);    String对象的一个方法用来判断是否是前缀,返回值是布尔类型

【最小公倍数和最大公因数】 

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {static void swap(int a,int b){int temp;temp = a;a = b;b = temp;} static void myfunc(int a,int b){int m,n,r;//辗转相除法//让第一个数字大if(a<b){swap(a,b);}//此时a>b m>n//m n 保留最初的两个数m = a;n = b;r = a%b;while(r!=0) {a = b;b = r;r = a%b;}//出来的时候说明r==0  即a能整除bSystem.out.printf("%d\n",b);//最大公约数System.out.printf("%d\n",b*(m/b)*(n/b)); //最小公倍数}public static void main(String[] args) {Scanner scan = new Scanner(System.in);myfunc(30,12);myfunc(12*7,30);scan.close();}
}

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

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

相关文章

【集群IP管理分配技术_DHCP】二、DHCP核心功能与技术实现

一、智能 IP 地址分配功能与技术实现​ 1.1 功能概述​ 智能 IP 地址分配是 DHCP 中间件的核心功能之一&#xff0c;它打破了传统 DHCP 固定的分配模式&#xff0c;能够根据网络的实时状态、客户端类型、接入位置等多种因素&#xff0c;动态且合理地分配 IP 地址。例如&#…

实现AWS Lambda函数安全地请求企业内部API返回数据

需要编写一个Lambda函数在AWS云上运行,它需要访问企业内部的API获取JSON格式的数据,企业有网关和防火墙,API有公司的okta身份认证,通过公司的域账号来授权访问,现在需要创建一个专用的域账号,让Lambda函数访问Secret Manager,来获取账号密码,然后通过配置访问公司内部A…

子网划分的学习

定长子网划分&#xff08;Fixed-length Subnetting&#xff09; 也叫做固定长度子网划分&#xff0c;是指在一个IP网络中&#xff0c;把网络划分成若干个大小相等的子网&#xff0c;每个子网的子网掩码长度是一样的。 一、定长子网划分的背景 在早期的IP地址分配中&#xff0…

3.QT-信号和槽|自定义槽函数|自定义信号}自定义的语法}带参数的信号和槽(C++)

信号和槽 Linux信号 Signal 系统内部的通知机制. 进程间通信的方式. 信号源&#xff1a;谁发的信号.信号的类型&#xff1a;哪种类别的信号信号的处理方式&#xff1a;注册信号处理函数&#xff0c;在信号被触发的时候自动调用执行. Qt中的信号和Linux中的信号&#xff0c;虽…

如何在 Element UI 中优雅地使用 `this.$loading` 显示和隐藏加载动画

如何在 Element UI 中优雅地使用 this.$loading 显示和隐藏加载动画 在现代 Web 应用开发中&#xff0c;用户体验至关重要。当执行耗时操作&#xff08;如网络请求或数据处理&#xff09;时&#xff0c;显示一个友好的加载动画可以让用户知道系统正在工作&#xff0c;而不是卡…

动态加载内容时selenium如何操作?

当处理动态加载的内容时&#xff0c;Selenium 是一个非常强大的工具&#xff0c;因为它可以模拟真实用户的浏览器行为&#xff0c;等待页面元素加载完成后再进行操作。以下是使用 Selenium 获取动态加载内容的详细步骤和代码示例。 一、安装 Selenium 和 ChromeDriver &#…

力扣第446场周赛

有事没赶上, 赛后模拟了一下, 分享一下我的解题思路和做题感受 1.执行指令后的得分 题目链接如下&#xff1a;力扣 给你两个数组&#xff1a;instructions 和 values&#xff0c;数组的长度均为 n。 你需要根据以下规则模拟一个过程&#xff1a; 从下标 i 0 的第一个指令开…

三维点拟合平面ransac c++

理论 平面的一般定义 在三维空间中&#xff0c;一个平面可以由两个要素唯一确定&#xff1a; 法向量 n(a,b,c)&#xff1a;垂直于平面的方向 平面上一点 平面上任意一点 p(x,y,z) 满足&#xff1a; ( p − p 0 ) ∗ n 0 (p - p0) * n 0 (p−p0)∗n0 即 a ( x − x 0 ) …

基于LSTM-AutoEncoder的心电信号时间序列数据异常检测(PyTorch版)

心电信号&#xff08;ECG&#xff09;的异常检测对心血管疾病早期预警至关重要&#xff0c;但传统方法面临时序依赖建模不足与噪声敏感等问题。本文使用一种基于LSTM-AutoEncoder的深度时序异常检测框架&#xff0c;通过编码器-解码器结构捕捉心电信号的长期时空依赖特征&#…

Docker 部署 PostgreSQL 数据库

Docker 部署 PostgreSQL 数据库 基于 Docker 部署 PostgreSQL 数据库一、拉取 PostgreSQL 镜像二、运行 PostgreSQL 容器三、运行命令参数详解四、查看容器运行状态 基于 Docker 部署 PostgreSQL 数据库 一、拉取 PostgreSQL 镜像 首先&#xff0c;确保你的 Docker 环境已正确…

MySQL性能调优(四):MySQL的执行原理(MYSQL的查询成本)

文章目录 MySQL性能调优数据库设计优化查询优化配置参数调整硬件优化 1.MySQL的执行原理-21.1.MySQL的查询成本1.1.1.什么是成本1.1.2.单表查询的成本1.1.2.1.基于成本的优化步骤实战1. 根据搜索条件&#xff0c;找出所有可能使用的索引2. 计算全表扫描的代价3. 计算使用不同索…

用 Go 优雅地清理 HTML 并抵御 XSS——Bluemonday

1、背景与动机 只要你的服务接收并回显用户生成内容&#xff08;UGC&#xff09;——论坛帖子、评论、富文本邮件正文、Markdown 等——就必须考虑 XSS&#xff08;Cross‑Site Scripting&#xff09;攻击风险。浏览器在解析 HTML 时会执行脚本&#xff1b;如果不做清理&#…

Redis SCAN 命令的详细介绍

Redis SCAN 命令的详细介绍 以下是 Redis SCAN​ 命令的详细介绍&#xff0c;结合其核心特性、使用场景及底层原理进行综合说明&#xff1a; 工作原理图 &#xff1a; ​ 一、核心特性 非阻塞式迭代 通过游标&#xff08;Cursor&#xff09; 分批次遍历键&#xff0c;避免一次…

SpringBoot3集成MyBatis-Plus(解决Boot2升级Boot3)

总结&#xff1a;目前升级仅发现依赖有变更&#xff0c;其他目前未发现&#xff0c;如有发现&#xff0c;后续会继续更新 由于项目架构提升&#xff0c;以前开发的很多公共的组件&#xff0c;以及配置都需要升级&#xff0c;因此记录需要更改的配置&#xff08;记录时间&#…

基于mybatis与PageHelper插件实现条件分页查询(3.19)

实现商品分页例子 需要先引入mybatis与pagehelper插件&#xff0c;在pom.xml里 <!-- Mybatis --> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3&l…

Spring Bean 全方位指南:从作用域、生命周期到自动配置详解

目录 1. Bean 的作用域 1.1 singleton 1.2 prototype 1.3 request 1.4 session 1.5 application 1.5.1 servletContext 和 applicationContext 区别 2. Bean 的生命周期 2.1 详解初始化 2.1.1 Aware 接口回调 2.1.2 执行初始化方法 2.2 代码示例 2.3 源码 [面试题…

C++ (非类型参数)

模板除了定义类型参数之外&#xff0c;也可以在模板内定义非类型参数 非类型参数不是类型&#xff0c;而是值&#xff0c;比如&#xff1a;指针&#xff0c;整数&#xff0c;引用 非类型参数的用法&#xff1a; 1.整数常量&#xff1a;非类型参数最常见的形式是整数常量&…

短视频+直播商城系统源码全解析:音视频流、商品组件逻辑剖析

时下&#xff0c;无论是依托私域流量运营的品牌方&#xff0c;还是追求用户粘性与转化率的内容创作者&#xff0c;搭建一套完整的短视频直播商城系统源码&#xff0c;已成为提升用户体验、增加商业变现能力的关键。本文将围绕三大核心模块——音视频流技术架构、商品组件设计、…

5.QT-常用控件-QWidget|enabled|geometry|window frame(C++)

控件概述 实现图形化界面的程序. Qt中已经给我们提供了很多的“控件" 就需要学习和了解这些控件&#xff0c;学会如何使用这些控件 编程讲究的是“站在巨人的肩膀上”&#xff0c;而不是“从头发明轮子" 一个图形化界面上的内容&#xff0c;不需要咱们全都从零去实…

2025-04-22| Docker: --privileged参数详解

在 Docker 中&#xff0c;--privileged 是一个运行容器时的标志&#xff0c;它赋予容器特权模式&#xff0c;大幅提升容器对宿主机资源的访问权限。以下是 --privileged 的作用和相关细节&#xff1a; 作用 完全访问宿主机的设备&#xff1a; 容器可以访问宿主机的所有设备&am…