
蓝桥杯
-希冀-
心若有所向往,何惧道阻且长。
展开
-
二进制中1的个数(剑指offer Java题解)
文章目录1.题目2.方法3.代码1.题目2.方法法①使用库函数中的Integer.bitCount(n)直接返回二进制中补码1的个数法②就是使用原来数与原来数减1进行与运算,依次消去最低位中1的个数,直至为0。从而设置一个变量ans,每次消去一个1就计数加1即可。3.代码...原创 2022-03-31 13:00:33 · 356 阅读 · 0 评论 -
字典序全排列题解(Java实现,以北京大学考研机试题为例)
文章目录题目分析(需要结合我之前上一篇全排列文章来看)代码实现运行结果题目分析(需要结合我之前上一篇全排列文章来看)在之前全排列的文章进行进一步理解之前的文章全排列是只交换起始位置和待排在第一位的元素进行互换,而其他元素不变,待第一趟全排列之后再回溯之前交换的元素位置。而这次题目要求的字典序全排列则是多了一个需求,即是在交换的起始元素位置和待交换元素的位置之间数组依次左移,相对应在一次排列后就要换成右移。代码实现import java.util.*;public class Main{原创 2022-03-13 14:56:20 · 1104 阅读 · 1 评论 -
蓝桥杯 最长子序列 题解【Java实现】
文章目录一、题目描述二、思路三、代码一、题目描述二、思路题目的意思就是从S串中顺序寻找有多少个字符是与T串中的字符是一致的所以,直接采用线性扫描进行遍历判断即可。因为是顺序查找,故假设从S串中的第i个位置找到第一个与T串中的相同时,T串才开始比较其第二个是否与S串的i+1个往后位置的字符是否相同,以此类推下去即可三、代码import java.util.*;public class Main{ public static void main(String[] args){ Sc原创 2021-04-13 17:38:20 · 411 阅读 · 1 评论 -
剑指Offer 数组中出现次数超过一半的数字 【Java实现】
文章目录一、题目2、思路描述三、AC代码一、题目2、思路描述数组中该数出现的次数超过一般,所以这个数的个数可以抵消其余的全部数的总和,即相当于一个塔,塔里只有水晶和农药,一个农药可以消灭一个水晶,假设水晶的数量是非常多的,则每遍历完一个塔里的水晶和农药,遇到水晶则计数加1,遇到农药计数减1,最终便会只剩下水晶。因此本题,可用一个数ans初始化为1用来计数,一个数temp等于数组的第一个元素,进行遍历整个数组,当数组的元素等于temp,则ans计数加1,否则ans计数减1,如果ans<=0则变原创 2021-04-06 17:03:36 · 169 阅读 · 0 评论 -
蓝桥杯 包子凑数 【Java实现】
文章目录一、题目描述二、思路三、AC代码一、题目描述二、思路题目可等效于类似于,有硬币面额分别为2,3,4,每种面额的硬币有无限多个,求使用这几种面额的硬币能否凑成x元。解题的关键点有如下几点:①在数学上有裴蜀定理:即要使得ax+by=c等式成立,则必定c为a,b两个数的最大公约数的倍数,此时上面的a,b相当于硬币的面额,c相当于我们所要凑出的那个数。然而不止两个数,两个以上的数也是如此,要使的等式成立,右边的数必须为左边数的最大公约数的倍数。②互质的两个数的公约数为1,所不能凑出的最大数为(原创 2021-04-05 17:11:19 · 400 阅读 · 2 评论 -
剑指offer 字符串中第一个只出现一次的字符题解【Java实现】
文章目录一、题目描述二、思路三、代码实现四、结果测试一、题目描述二、思路题目要求返回第一个,且只出现一次的字符。所以给出一个字符串,我们进行遍历每一个字符,将其存入Hash表中(即创建一个HashMap对象,HashMap的key存放字符,value存放字符出现的次数),遍历完成之后再遍历每一个字符在HashMap中的vlaue值是否等于1,即满足第一个字符只出现一次。三、代码实现import java.util.HashMap;import java.util.Scanner;publ原创 2021-03-30 17:44:26 · 195 阅读 · 0 评论 -
NOIP2009提高组 Hankson的趣味题【Java实现】
文章目录一、注意点二、题目三、思路题解四、能通过8/10数据的代码一、注意点使用如下题解只能通过8/10个数据二、题目三、思路题解因此当满足上述4个条件时就计数加1四、能通过8/10数据的代码import java.util.*;public class Main{ static int gcd(int a,int b){ if(b==0){ return a; } return gcd(b,a%b);原创 2021-03-21 21:01:56 · 352 阅读 · 0 评论 -
蓝桥杯 质数题解 【Java实现】
文章目录一、题目描述二、AC代码一、题目描述二、AC代码import java.util.*;public class Main { static Scanner sc = new Scanner(System.in); static boolean num[]=new boolean[1001];//默认是false public static void main(String[] args) { //给定一个正整数N,请你输出N以内(不包含N)的质数以及质数的个数。 int n原创 2021-03-21 18:01:11 · 261 阅读 · 0 评论 -
蓝桥杯 单词分析 题解【Java实现】
文章目录一、题目二、思路题解三、代码一、题目二、思路题解我是使用逆向思维求解,即采用26个小写字母与所输入字符串进行比较,然后使用计数的数组进行计数,一直遍历到26的小写字母都遍历完成。然后对计数的数组进行遍历比较,找出最大值和最大值对应的下标,因为计数数组的下标和26个小写字母的下标是一一对应的。三、代码import java.util.*;public class Main { public static void main(String[] args) { Scanner s原创 2021-03-17 21:11:11 · 1020 阅读 · 1 评论 -
蓝桥杯 走方格 【Java实现】
文章目录一、题目二、思路题解一、题目二、思路题解这题显然是一个dp加递推的问题状态方程:arr[i][j]=arr[i-1][j]+arr[i][j-1]原创 2021-03-15 20:34:13 · 366 阅读 · 0 评论 -
蓝桥杯 明码题解 【Java实现】
文章目录一、题目二、思路描述三、代码一、题目二、思路描述总方法:直接模拟,遇到字母直接输出,遇到数字循环输出数字的前一个字符即可。步骤:先用字符串输出一长串,之后将字符串转化为字符数组,然后遍历字符数组进行数字和字母判断即可求解三、代码import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in);原创 2021-03-09 23:26:55 · 608 阅读 · 0 评论 -
usaco training 1.2 十三号星期五 【Java实现】
文章目录一、题目二、思路描述三、代码实现一、题目二、思路描述主要使用枚举和模拟首先按年份(作为外层循环)枚举(1900 年 1 月 1 日,结束于 1900+N−1 年 12 月 31日)其次按月份(作为内层循环)枚举,但此时月份要加上一个特判,即如果月份是2月时,判断所在年份是否是闰年,闰年2月有29天写一个长度为7的数组,即下标为0的表示星期一、下标为1表示星期二……使用一个变量day用来计算当前时间距离1900年1月1号时隔多少天了,因为1900年的1月1号就是星期一,故距离的天数对原创 2021-03-07 17:07:52 · 287 阅读 · 2 评论 -
蓝桥杯 完全二叉树的权值题解【Java实现】
文章目录一、题目二、图解思路三、代码实现一、题目二、图解思路根据如上规律再加上输入的格式是线性的,就可以使用两层循环,第一个循环控制每一层的节点,即控制层数,第二层循环开始从每一层的首节点开始遍历当层的每一个数据并实行累加,数据完毕之后可假设该二叉树第一个元素为最大,之后下面的累加后的和与最大进行比较,使用一个变量记录最大数的所在层数需要注意的一点,累加的结果变量和数组需要使用long类型三、代码实现import java.util.*;public class Main{ static原创 2021-03-06 20:56:18 · 488 阅读 · 2 评论 -
蓝桥杯 日期问题题解【Java实现】
文章目录一、题目二、思路题解三、代码实现一、题目二、思路题解根据输入输出的样例可得出假设输入的日期格式:AA/BB/CC;则可能的形式是:AA/BB/CC,CC/AA/BB,CC/BB/AA且对于一个日期的年月日需要注意的点有:①判断年份是否是闰年,若是闰年2月有29天,若不是闰年2月只有28天②判断月份1,3,5,7,8,10,12月共有31天,4,6,9,11月共有30天③根据输入形式中的AA可能是00,所以当AA在日期充当月份的天数时就不符合了,但由于前面的①②月份已有判断,则需原创 2021-02-25 23:46:52 · 533 阅读 · 2 评论 -
蓝桥杯 分巧克力题解【Java实现】
文章目录一、题目二、思路题解三、代码实现四、运行结果截图一、题目二、思路题解题目的意思是说要找出一个最大边长,使其满足N块巧克力按此边长切割能分给N个小朋友;使用二分查找的思路找出该边长(最小值是1,最大值可以取最大的数据范围100000)图解如下:则从图中可以看出,在进行二分遍历时:若满足能够分给k个小朋友后,我们要把左端点设为中间值,右端点不变,这样才能使得找到的边长最大注意点:若已知一个矩形的长w,高h,要对该矩阵按已知边长b进行切割成一个个边长为b的小正方形,求切割后小正方形的个数原创 2021-02-24 20:19:38 · 745 阅读 · 0 评论 -
二分查找算法详解【Java实现】
一、先引入题目请对一个有序数组{1,3,7,8,9,10}进行二分查找,输入一个整数,看看该数是否在数组中,在则返回该数下标二、二分查找思路分析1.首先确定该数组中间的下标(left+right)/2:(左端点加右端点的和除以2),记为mid2.然后让需要查找的数,即目标数(记为findval)与中间值arr[mid]进行比较,有如下几种可能:①若findval>arr[mid],则findval在中间值的右侧,故需要向右递归②若findval<arr[mid],则findva原创 2021-02-24 15:51:06 · 280 阅读 · 0 评论 -
蓝桥杯 带分数题解 (Java实现)
一、题目带分数100 可以表示为带分数的形式:100=3+69258/714还可以表示为:100=82+3546/197注意特征:带分数中,数字 1∼9 分别出现且只出现一次(不包含 0)。类似这样的带分数,100 有 11 种表示法。输入格式一个正整数。输出格式输出输入数字用数码 1∼9 不重复不遗漏地组成带分数表示的全部种数。数据范围1≤N<106输入样例1:100输出样例1:11输入样例2:105输出样例2:6二、思路题解首先题目所说的1-9个数字,原创 2021-02-22 19:22:27 · 1026 阅读 · 5 评论 -
蓝桥杯 全排列(Java实现)
文章目录一、思路二、代码实现三、程序运行结果截图一、思路以1,2,3三个数全排列为例:共有6种情况如下1,2,31,3,22,1,32,3,13,1,23,2,1观察特点:每一个数字都会出现在首位,之后可看成是其余数字的全排列图解实现:先利用for循环,使得1,2,3都开始遍历到成为首元素(即交换首元素)之后下一位递归其余数的全排列(调用全排列函数函数)之后回溯还原的交换元素,避免下一次时的重复二、代码实现import java.util.*;public cla原创 2021-02-22 13:59:26 · 482 阅读 · 2 评论 -
动态规划解决01背包问题和完全背包问题(闫氏DP分析法分析)
一、闫氏DP分析法(从集合角度来分析)核心思想:所有的DP问题基本都是有限集中最值、个数问题。DP问题一般经历两个阶段(状态表示【化零为整】、状态计算【化整为零】)。集合划分依据:寻找最后一个不同点。二、例题演示1.01背包问题分析:最后两个状态集合中选最大值import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc = new Sca原创 2021-02-09 20:16:21 · 256 阅读 · 0 评论 -
Java中本地日期类LocalDate获取判断具体某年的某月某日是星期几问题
一、问题导入以第四届全国蓝桥杯软件设计大赛 java软件开发本科B组中的第一题为例:曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 还有人称今后的某个世纪末的12月31日,如果是星期一则会…有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 于是,“谣言制造商”又修改为星期日…1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?请回答该年份(只写这个4位整数,不要写12月31等多余原创 2021-02-05 17:26:53 · 2309 阅读 · 2 评论