- 博客(78)
- 收藏
- 关注
原创 小红杀怪(java)
我发现自己忽略了一个点 就是如果 怪兽血量都是负数了,还加到次数里面有问题。所以需要新增一个判断剩余血量的 如果剩余血量>0 才能使用1 技能。我按照这个思路写,结果发现向上取整函数好像没有使用正确。然后根据二技能的使用次数得出两只怪兽的剩余血量。因为你的剩余血量只有小于等于0 才算击败野怪。然后再除以1 技能的伤害 (向上取整)每次的sum 好像都没有向上取整。原因在于我括号的内部是整数的除法。,整数的出发是向下取整 ,枚举 二技能的使用次数。视频上说向上取整是这样。
2025-04-11 16:14:37
300
原创 递归实现组合型枚举(java)
定义状态 : 题目的要求是要求找出 n个数的排序情况,那么我们的每一个状态就可以看作是 i个数的排序状态。终点状况 : 如果找到了n个数的排序情况 ,我们就是输出长度为 n的数组的每一个元素,输出完成就回溯。两个数组一个用来判断元素是否被访问过,一个用来存储元素,然后等到 终点情况 输出。我们逐层递归 然后如果某一个元素没有被访问过 我们就把他添加到数组中。起始状态 :0 个数字的排序情况,也就是空数组 对吧。状态转移:起点是如何一步一步的走到终点的呢?emm,前几天做的dfs的题,做完就忘记。
2025-04-08 00:22:15
119
原创 什么时候使用long 来接收输入呢
不过我的建议是如果涉及到乘和平方都直接用long 来接收输入和输出就行了。因为用到了平方 出现 10 的6次方的平方已经超出了int 的范围。i是int 类型的n 是long类型的所以直接就自动类型转换了。你在乘 平方这种会移除的操作来个强制类型转换也行。其实也可以不用long 来接收输入。输入的范围是 10 的6 次方。这为为啥要用long 呢。我想了很久,后来才想明白。int转换成了long。所以就不用进行强制转换了。
2025-04-05 14:26:21
189
原创 数字诗意(java)
对每一个输入的数都进行判断只有等于数组中的一个就跳出循环然后cnt++ok思路有了那我们怎么来判断输入的某一个数是不是2 的整数次幂呢?我想的是用一个数组来存储2的0次幂到2 的17次幂的大小。那么他是不是再加1 就变成最前面是1 后面都是0。你发现什么了是不是所有的2 的幂次方都不满足。x的二进制数 肯定是1 开头后面都是0。只要不是2 的幂次方就都是合法的数字。x-1 的二进制数是0开头后面都是1。2的5次方对应的二进制数-1。x如果是2的整数幂次方,那么。2 的5次方对应的二进制数。
2025-03-30 20:43:50
270
原创 小蓝和钥匙
从28个人里面选14个人分到原来房间的钥匙 C 28 14。另外14个人错位排序 模板 请在此处填写你的解题思路 D14。做题可以看出来是错位排序 或者组合数。
2025-03-30 16:56:28
149
原创 挖矿(java)
前缀和求两边1到m点的之间的所有点到0 之间的矿石总和 然后利用。折返回到原点 的距离是2i 所以 右边走m-2i 步。第二种情况就是朝着一个方向走了一段路之后就折返了。取绝对值 然后判断矿洞的坐标是否是走m步可以到达。然后枚举i从 1 到2i<m 取矿石数量的最大值。先求只朝着一个方向走的总矿石数量 取最大值。所以的话 m-2i>0 m>0 2i <m。然后之前一直不理解的就是为啥要求前缀和。所以还可以向负半轴走(m-2* x)因为你要求走过的去区域捡到的矿石总数。必须满足x>0 并且m-2x>0。
2025-03-30 10:16:10
217
原创 最大数字(逆天!忽略输入方式!!!!!!!!!)
这种处理方式既能完美应对所有规模的输入数据,又符合算法竞赛的常规解题思路,是蓝桥杯等编程竞赛中的标准做法。在蓝桥杯考试中,使用字符串接收数字输入是完全正确且推荐的做法。解释:百位1→加3到4,十位2→减3次到9,个位3→不操作。验证了大数处理的正确性。
2025-03-28 16:33:55
268
原创 最大数字(java)(DFS实现)
查了一下java中的long 范围是 从-2 的63次方到2 的63 次方-1,也就是范围到2 * 10 的18次方-1。最大的n已经完全超出了int 的范围了,当时写的时候没有注意输入的N 的范围。用long 来接受输入n,就行了,emm,下次一定要睁大眼睛看输入的范围。然后dfs的第二个保存修改之后的数字的参数也得用long。回溯之前 : 剩余的 加的次数 就是n =n -t;dfs(i,v) i表示当前这个数的位数的下标。加的次数就是9-x 和n 中的最小值。t 取 (9-x)和 n 的最小值。
2025-03-28 16:21:41
373
原创 最优分组(java)
E=阴性消耗×阴性概率+阳性消耗×阳性概率=1×(1−p)K+(K+1)×[1−(1−p)K]=(1−p)K+(K+1)−(K+1)(1−p)K=K+1−K(1−p)K(合并同类项)E=阴性消耗×阴性概率+阳性消耗×阳性概率=1×(1−p)K+(K+1)×[1−(1−p)K]=(1−p)K+(K+1)−(K+1)(1−p)K=K+1−K(1−p)K(合并同类项)。让deepseek给我解释了一下题目的含义,我才反应过来,这他么的是求消耗试剂数量的最小期望呢。怎么说呢,做的我是心力憔悴呀,我丢。
2025-03-28 11:38:27
859
原创 分布式队列(java)
在此之前需要用in.nextLine()来吃掉in,nextInt()接收的n后面的换行。节点的同步某个节点的时候某个节点的元素个数+1之后的个数一定是要小于等于主节点的元素个数。主节点的元素个数是一定要大于等于同步之后的某个节点的元素个数的。但是实际上不用管这个数字只要让主节点的元素个数+1就行了。那么每次都是0 和主节点的个数在作比较。这道题的关键在于找出最少元素的节点。用一维数组来存储每个节点的元素个数。一定要小于等于主节点的元素个数。同步的时候也需要接收节点的下标。如果他的元素个数增加后的个数。
2025-03-27 22:23:33
293
原创 Exception in thread “main“ java.lang.NumberFormatException: For input string: “1.00“
emm,34行代码如下原因1e9是浮点数,一直以为他是个整数BigInteger"1.00""1.00"1.00。
2025-03-27 21:06:39
155
原创 递归实现组合型枚举(java)(DFS)
dfs其实不是一种算法,就是一种穷举,本质就是把所有的可能情况都选出来。我们分别用两个变量来记录我们选到了那个数字,以及已经选了多少个数字。或者如果我们剩余的数字不够选我们是不是就可以回溯了。是不是可以看成我们选的0 ,然后选了0个数。然后我们用一个数组来保存我们选择的的数。并记录当前选到了1到n当中的那个数字,我们选够了m个数字是不是就可以打印了呀。1-5 5个数字里面选择3个数字,我们先从1开始选数字,可以选到n。最一开始我们一个数字也没有选,然后我们不断的去选数,让自己给气笑了,简直。
2025-03-26 20:23:36
224
原创 区间端点(java)(贪心问题————区间问题)
这种我是真的没有想到,这样的好处就是后面便利的时候可以通过foreach循环直接便利qu的子元素也就是对应的某一个区间,选取每一个区间的右端点 ,可以让一个端点尽可能多的出现在其他区间。每次先取最小的右端点,然后直到后面的某一个区间的左端点比这个点大。将一个二维数组变成一维数组,每一个一维数组直接存储区间左右端点。先给区间排序,按照右端点从小到大给区间进行排序。就取这个无法覆盖的区间的右端点作为新的点。设置一个记录出现在多个区间的端点的变量。贪心的思路是 局部最优——>全局最优。按照右端点的升序排序。
2025-03-25 23:26:13
167
原创 迷宫问题——(java)(bfs)
我们每次只添加队头的相邻元素,然后添加完队头的相邻元素(注意:只添加没有访问过的元素,1虽然也是相邻元素,但是1已经被访问过了,所以添加1到队列),队头就算已经访问过了。队首的元素不断变化,队尾的元素不断添加,最后直到每一个节点都被访问过,那么此队列中就无法添加元素了,队列中的元素就会不断的减少直到变成空队列。每次将队首的元素的取出,然后添加和队首元素相邻并且没有被访问过的元素到队尾,然后更新队列中的每一个元素到起点的最短距离。判断队首元素是否被访问过,如果被访问过,就判断队首元素的下一个元素。
2025-03-25 20:45:16
794
原创 为什么要用链表来实现队列呢?(java保姆级别解释)
链表实现队列的优势:动态扩容、头尾操作高效、内存灵活。选择依据:根据数据量、操作频率和内存需求决定。对于大多数简单场景,LinkedList作为队列实现是完全够用的!
2025-03-25 20:04:10
585
原创 【无标题】
就是这里的需要添加的下一个元素应该用最后一个元素res来接收,保证res是最后一个元素。所以s[n+1] = s[n+1-n]+......+s[n+1-1];然后计算s[n+2] = 2 * s[n+1] - s[1]res一直都是不变的一直是s[n+1]所以不可能输出结果的。那么s[8] = s[8-7]+...+s[8-1];因为s[i] =s[i-n]+..+s[i-1];如果一直到 s[K]>N了都没有出现s[k]=N,所以s[k] = s[k-1]*2 -s[k-4]
2025-03-23 20:22:08
338
原创 弹珠堆放————java
我发现除了第一二层没有规律,其他层的弹珠数量都是等于前一层的数量再加上这一层的层数。上代码 下面那段注释掉的代码是我有点不放心,验证了一下,发现刚好不够第495层。
2025-03-23 16:36:33
164
原创 小蓝的操作————(java)差分数组
子序列也是同理,给每个子序列不断的减一指导,子序列中某一个数等于1 在拆开,再减,最后你会发现拆的子序列都只剩一个元素了。后面的数比前面的数字小,是不是就是说明在后面的那个数变成1之后前面的那个数字才会变成1。但是上面的计算是怎么计算的呢,把每一个大于0 的差分数组的元素都加在了一起。小于0 的部分的操作次数是和大于0 的操作次数是有共用 的部分的。下次不管三七二十一直接加纳 long!因为大的元素,那个数的操作次数是不是也包含了小的数的操作次数。来言归正传,这是老师写的,我看了一遍,跟着写了一遍。
2025-03-23 16:15:46
570
原创 异或和之和————java(暴力)
考试的时候我就拿60%的分就行了emm感觉他这个评分系统有大病怎么说呢,一开始看不懂题目,外加上不知到异或怎么实现下面这个符号就是异或异或运算的规则:(只要记住这两个就行了)x^0 = x;x^x = 0;ok知道异或的基本规则之后,我们看题,题目如下大概意思就是要求区间上的元素的异或,然后再求和,避雷我的错误写法,我当时还是没有理解这个题目其实你在稿纸上面写一下就知道了我的代码逻辑的话实现的效果是不对的要求区间的异或的话是不是这样i =1 j= 1 的时候,是不是这样。
2025-03-22 18:40:34
329
原创 错误票据————java
emm,一上来没看懂题目在说啥,我丢,然后人家讲了一顿,发现不知道输入的结束条件,怎么来处,这是一开始的思路,不太对,一开始只想到了数组接收,但是数组接收输入的话,你没办法判断输入的终止条件呀,哥们。emm报错了,in.nextLine().split(" ")得到的其实是一个字符串数组。写成了list.add(in.nextLine().split(" "))然后就不知道该怎么判断了,我丢,忘了for循环怎么便利了,哎。还有,判断哪个数是断号那个数字是重号的时候,又不会便利了。
2025-03-21 19:58:09
216
原创 蓝桥杯————封闭图形个数(自定义排序问题)
然后根据已经统计的0-9 每个数的封闭图形的个数 利用取余数的思想得到对应的数字,条件2,如果两个元素的封闭图形的总个数相同,就判断两个数字的大小,按照从小到大排序。如果两个元素的封闭图形的总个数相等,就根据条件2进行排序。条件1:现根据每个元素的封闭图形的总个数来进行升序排序。然后将对应数字对应的封闭图形的个数加到sum中,sum用来统计每一个输入的元素的封闭图形的总个数。另一个数组num用来统计每个数的封闭图形的个数。盲猜你也是跟着蓝桥14天速成训练营,加油了兄弟。然后计算每个元素的封闭图形的个数,
2025-03-21 16:39:27
404
原创 蓝桥杯——————数位排序(java)
按照数位和从小到da排序,数位和相同,就会比较o1o2的大小按照数字o1,o2从小到大排序(数字本身是不会相同的,除非o1,o2是同一个数字,当然这是不可能,因为比较器就是比较的是任意两个不同的数字o1,o2)我的理解就是这其实相当于高考的时候理科报志愿,如果两个人分数相同,先看数学谁考的高如果数学分数相同,再看物理多少分这种。如果o1 o2的初始顺序和返回条件的顺序是 相同的,那么就是升序排序,否则就是降序排序。就会按照数位和从大到小排序,数位和相同,按照数字从小到大排序。首先按照数位和从小到大排列,
2025-03-21 12:20:27
346
原创 保姆级教学:为什么 sumA - sumB < 0 时 a 排在 b 前面?(Ararays.sort()实现自定义排列)
是元素的值,不是数组位置,排序算法会自动选择需要比较的元素对。(数位和1+1=2),
2025-03-21 12:13:01
172
原创 bigInt报错(Exception in thread “main“ java.lang.NullPointerException: Cannot invoke “java.math.BigInt)
空指针异常,不太会用BigInteger,以为初始化和int一样,直接等于就行了看了一下源代码,初始化赋值只有下面几种情况智能赋值这几个,而且必须用对应的英文来表示一开始用int 来初始化数组,我还没有意识到问题的严重性,直到结果返回-1我才意识到好像没有那么简单,我丢,然后我把前2020个斐波那契数一个一个打印出来(用long 打印的)结果我发现后面的全是负数,我就知道,这绝对溢出了,我丢,然后就用bigInteger发现还不会用我一开始的代码如下。
2025-03-20 21:39:04
874
1
原创 素数问题(埃式选)数组越界错误(不要在初始化n之前进行初始化数组)
的初始化时机不正确。它们在类加载时被创建,此时。照着敲了一遍但是为啥报数组越界的错误呢,没想明白。的值为0,导致数组长度为0。后,数组长度未更新,导致访问越界。的值后动态初始化数组。
2025-03-20 20:02:22
115
原创 找素数(java)
emm对蓝桥云课真是无语,尼玛的运行都不运行就拿出来讲,然后判断不出素数,真的误人子弟呀,问了一下deepseek,deepseek说我漏了7,7也是素数。能教出来这种代码,我更傻叉,还信了他的鬼话。
2025-03-20 19:32:57
184
原创 三带一(java)
排序之后的相同的牌一定紧挨着,所以3张牌要么是前三个要么是后三个。只要保证第一张牌和第三张牌相同,并且第一张牌和最后一张牌不相同,或者第二张牌和最后一张牌相同,并且第一张牌和第二张牌不相同即可。第一种思路,用字符数组来接受每次的4个字符,接受之后进行排序。
2025-03-19 20:46:55
170
原创 汉诺塔问题(java)
以为是视频里面代码错了,看了好几遍,发现自己在递归结束的时候没有写return 以及,在把每一次的起始柱子上面的最后一块盘子移动的时候应该写成,n是变量。一次类推,如果问我们有n个盘子,我们是不是想先把n-1个盘子先都放到B柱子,然后就可以直接把第n个盘子放到c了。第一步:如果把上面那两个盘子都移动到b,是不是就只需要把第三个盘子从A移动到c了。我们肯定是想把三个盘子的问题转换成两个盘子的问题来计算对吧。然后再把剩下的2个盘子从b借助柱子a 移动到c就可以了。视频,以为自己会了就去写了苦苦报错。
2025-03-19 16:49:03
125
免费没有广告的解压缩压缩软件,强烈推荐,NanaZip 是一款面向现代 Windows 体验的开源文件压缩器,其源代码来自著名的开源文件压缩器 7-Zip
2025-01-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人