自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 用回溯算法解决01背包

当在backtrack()函数中出现不满足cw + w[i] <= c这个条件时,也就是说取i这个物品后总重量超过了c,那肯定就不进行if后面的语句,刚好cw不会加上i这个物品,然后我们想要再继续搜索下面的物品,刚好就执行后面的if语句,搜索右子树,即搜索i这个物品后面的其他物品,看看是否满足条件。我写的是当达到最大容量的时候就是结束的时候,根据画出来的树状图这肯定是不对的。到达叶子节点的时候,已经形成了一个完整的符合题意的解。1.可行性剪枝:如果装不下这个物品,就进行这个物品的剪枝,不搜索选这个分支。

2026-05-17 18:00:20 763

原创 oj3737月度开销

约翰打算为连续的 M (1≤ M ≤ N) 个财政周期创建预算案,他把一个财政周期命名为 fajo 月。接下来 N 行,每行包含一个 1 到 10000 之间的整数,按顺序给出接下来 N天里每天的开销。因为我写的是将canSplit()函数放在主函数中,所以在遇到不满足条件的问题时无法进行多次模拟。找到一个可以进行二分查找的范围,然后进行二分查找直到找到可以满足划分组数groups<m的最小值。约翰的目标是合理安排每个 fajo 月包含的天数,使得开销最多的 fajo 月的开销尽可能少。

2026-05-16 18:15:48 56

原创 二分法——方程求解

如果f(mid) * f(left) < 0说明mid和left之间有一个根,这时就将right=mid,再求一个新的更小区间的mid再进行比较。如果f(mid) * f(left) > 0说明mid和left之间没有根,那根就存在于mid和right之间,所以将left=mid再进行右半边的小区间划分,再进行根的求解。如果函数 f(x) 在区间 [a,b] 上连续,且 f(a)⋅f(b)<0(即两端点函数值异号),则区间内至少存在一个根。求下面方程的根:f(x)=x3−5x2+10x−80=0。

2026-05-16 14:57:06 40

原创 oj1712排列的字典序问题(C语言)

根据对数字序列的观察,就会发现要找到下一个数字就要从1的后面,也就是7,3中找到一个最小值,然后与1互换,互换之后是3,7,1,而下一个数字是3,1,7,所以肯定是在3后面开始进行从小到大的排序。上述我都思考到了,但就是没有思考到要从右向左找到第一个升序的数字,现在才明白过来,要进行上述操作,肯定是要7,3无法再进行排序才进行下一波交换。个排列按字典序排列,并编号为0,1,!例如,当n=3时,6 个不同排列的字典序值如下: ……, n }的一个排列,计算出这个排列的字典序值,以及按字典序排列的下一个排列。

2026-05-14 22:11:37 257

原创 C语言之A-B数对

因为二分查找最先找到的是接近某个中间值的目标值,然后再往前和往后查找附近的目标值,不如直接用上述方法把相同的值都放在一个窗口里,更简便。给出一串正整数数列以及一个正整数 C,要求计算出所有满足 A−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。对于每个数a[i](作为B),我们要通过二分查找在题目输入的数中找有多少个数等于a[i]+c(即A)。对于 100% 的数据,1≤N≤2×10^5,0≤ai​<2^30,1≤C<2^30。一行,表示该串正整数中包含的满足 A−B=C 的数对的个数。

2026-03-12 18:15:27 324

原创 C语言之棋盘

2.颜色不一样但都有颜色的时候,只需要进行1个金币的花费,这个条件也包括用魔法改变颜色之后有颜色的格子,所以需要将这一部分包含在变魔法的条件里面。只有当你离开这个位置,走到一个本来就有颜色的格子上的时候,你才能继续使用这个魔法,而当你离开了这个位置(施展魔法使得变为有颜色的格子)时,这个格子恢复为无色。但是在该深搜题目中,回溯的原因是某一节点所有方向都搜索完后,为了不影响其他节点的搜索,需要将访问过的点都变成未访问过的状态,这样才能正常进行最小路径的计算。你现在要从棋盘的最左上角走到棋盘的最右下角。

2026-03-09 21:57:02 405

原创 N皇后问题

n皇后问题研究的是如何将n个皇后放置在n*n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的n皇后问题的解决方案。

2026-03-04 20:50:29 512

原创 C语言之数字三角形(dfs+记忆化搜索/动态规划)

上述题目就是找到上一层的最优解,即最大值,然后再计算下一层的最大值,也就是通过子问题的最优解推导出原问题的最优解。写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。对于 100% 的数据,1≤r≤1000,所有输入在 [0,100] 范围内。上述题目最经典的方法就是利用动态规划来解决,方法简单且好理解!在上面的样例中,从 7→3→8→7→5 的路径产生了最大权值。后面每行为这个数字金字塔特定行包含的整数。单独的一行,包含那个可能得到的最大的和。第一个行一个正整数 r,表示行的数目。

2026-03-01 16:04:54 403

原创 C语言之ISBA号码

我就没有把数字字符转换成数字,而且我利用的是将分隔符和数字字符都输入,但在输入的过程中,将分隔符通过i--来去除分隔符,这样很不简便,忘记用if条件语句了。以此类推,用所得的结果 mod11,所得的余数即为识别码,如果余数为 10,则识别码为大写字母 X。我写的代码最主要的问题还是没有一开始将一串字符输入到数组中,以及没有进行数字和数字字符的转换。你的任务是编写程序判断输入的 ISBN 号码中识别码是否正确,如果正确,则仅输出。,否则,按照规定的格式,输出正确的 ISBN 号码(包括分隔符。

2026-02-27 22:16:32 302

原创 并查集(附带例题)

1.将两个元素添加到同一个集合中 union操作:合并两个元素所属的集合2.判断两个元素是否在同一个集合中 find操作:查询元素属于哪个集合用根结点的编号表示集合,子结点都指向父结点,而根结点为了和其他结点区分,就指向自己想要查询某个元素属于哪个集合,就只需要找到它对应的根结点。要合并两个元素的集合,就找到它们对应的根结点,让其中一个根结点指向另一个根结点,使两个元素的根结点都变成同一个根结点,那二者就属于同一个集合。合并操作:按秩合并。

2026-02-25 12:02:10 1048

原创 动态规划——分组背包(附带经典例题3个)

1.定义:给定一个整数m表示背包的容量,有n个货物可供挑选。每个货物有自己的体积,价值,组号。同一个组的物品只能挑选一件,所有挑选物品的体积总和不能超过背包容量。怎么挑选货物能达到价值最大,返回最大价值。2.dp[i][j]表示1~i组上,每组只能选一件商品(注意:i表示的是组,不是商品)容量不超过j的条件下的最大价值。1)不要i组商品就满足条件——dp[i-1][j]2)要i组商品,考虑要哪一件?全试!!!a:dp[i-1][j-a的体积]+a的价值。

2026-02-24 11:53:49 1137

原创 C语言之奇怪的电梯——广搜(队列描述的清楚)

呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 i 层楼(1≤i≤N)上有一个数字 Ki​(0≤Ki​≤N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3,3,1,2,5 代表了 Ki​(K1​=3,K2​=3,……),从 1 楼开始。在 1 楼,按“上”可以到 4 楼,按“下”是不起作用的,因为没有 −2 楼。那么,从 A 楼到 B 楼至少要按几次按钮呢?

2026-02-21 17:37:09 477

原创 C语言之单词方阵——深搜(很好的深搜例题)

但输出不同的是只输出搜索出来的符合题意的字符,那我们就需要将符合题意的字符进行标记,最后用这个标记来输出。摆放可沿着 8 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。深搜一定要明确从哪个地方开始搜索,这道题目没有直接给出起始位置,我们就要从题意中揣测我们要搜的是什么。3.可以在搜索过程中进行终止条件的书写,如果深搜到某一位置终止了,直接进行break,进行另一个方向的深搜。其他的一开始的坐标赋值,新坐标的计算都和传统的深搜一样。突出显示单词的 n×n 矩阵。

2026-02-21 12:06:59 794

原创 C语言之合唱队形——动态规划

又要求中间必须是最高的,所以要从第一个人开始遍历,看看是否满足题意且上升序列的时候人数是最多的,下降序列的时候人数也是最多的。因为我们之前计算的b[j]都是符合题意的,都满足if语句条件,就是在计算当i=1,2,3时计算出来的真实的值,所以不需要再进行判断,所以在后面就可以直接利用。即上述b[i]和c[i]。b[i] = max( b[j] + 1 ) 对于所有 j < i 且 a[j] < a[i]j=2: 186<200 → b[2]+1=2这些都是根据上述计算出来的b[],再来计算的。

2026-02-13 22:42:49 1084

原创 C语言之用最少数量的箭引爆气球

将上述气球按起点排序,然后开始遍历所有气球,当前一个气球的终点和当前气球的起点没有重合,则需要两个箭。上述可以是return pointA[0]-pointB[0],返回的必须是值,不能是return a-b,因为a和b是指针。-在x = 11处发射箭,击破气球[10,16]和[7,12]。- 在x = 2处发射箭,击破气球[1,2]和[2,3]。- 在x = 4处射出箭,击破气球[3,4]和[4,5]。-在x = 6处射出箭,击破气球[2,8]和[1,6]。每个气球需要射出一支箭,总共需要4支箭。

2026-02-10 11:07:25 462

原创 贪心算法——区间覆盖(附加例题2)

然后判断排序后的第二个范围的左边界和第一个的右边界是否有重合位置,如果有重合,则说明第一个雷达在第二个范围内,肯定可以覆盖第二个岛屿,那就不用再添加雷达,但如果没有重合,则说明第一个雷达不能覆盖第二个岛屿,肯定就要再添加一个雷达,这个要添加的肯定也要放在第二个范围的右边界。首先明确,因为岛屿都是在海上的,而雷达是只能在陆地上的,所以要求最少雷达数,那就是当雷达在海岸线上时,是最优选择。对于全部数据,n≤1000,d≤2×10^4,∣xi​∣≤2×10^6,0≤yi​≤2×10^4。上述就是雷达覆盖范围。

2026-02-09 20:41:33 1248 2

原创 C语言之外卖店优先级(蓝桥杯省A)

每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减到 0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加 2。6 时刻时,1 号店优先级降到 3,被移除出优先缓存;2 号店优先级升到 6,加入优先缓存。每家外卖店都有一个优先级,初始时(0 时刻)优先级都为 0。如果某家外卖店某时刻优先级大于 5,则会被系统加入优先缓存中;给定 T 时刻以内的 M 条订单信息,请你计算 T 时刻时有多少外卖店在优先缓存中。对于所有评测用例,1≤N,M,T≤10^5,1≤ts≤T,1≤id≤N。

2026-02-09 16:42:59 495

原创 C语言之统计数字

上述代码的整体思路:将数字进行从小到大的排序,这样就可以将当前数字和后面的数字进行比较,如果相等,那就计数器加一,直到最后这个数字和后面的不相等,就输出。二者前一个数字和后面数字不相等的边界,都是输出相同的变量,可以在一个地方一块输出,不需要那么多步骤。这么大的数字就不应该直接用之前的做题思路解决,而是先排序或者是之前的做题思路,遇到这么大的数,可能是一边输入一边执行语句。但上述代码for循环里的执行语句还是应该好好斟酌,思考一下再写,尤其是最后一个数字的时候,没有后面的数字与其比较,所以直接++。

2026-02-06 22:50:39 816

原创 C语言之最大字段和

这其实是根据上述代码中rear=-1是通过两次while循环得出的,后面的q[++rear]=i还没有用,刚好在最后一次front<=rear不满足,退出while循环,执行q[++rear]=i,得到q[0]=2,这刚好表示的是队列下标为0的位置是2,也就是队列的第一个位置,所以这样就保证了窗口处是最小的值。上述我写的代码是利用前缀和和单调队列的,但是我写的时候不知道没有长度规定的时候应该怎么写,但是经我观察发现有长度规定的时候,主要是在。一开始将下标0放到队列中,front=0,rear=0,q[0]

2026-02-06 16:53:46 650

原创 C语言之表达式括号匹配

我写代码主要有一个误区:我想的是一个在前面左括号必须要有一个右括号对应,完全忘记考虑可以在一个括号里套另一个括号,所以就导致我一直在考虑如何保证在第二个左括号前面有一个右括号,实际上,这是我无法写代码的,就一直进行不下去。如果没有字符串结束符就会一直读取后面的随机值,长度会不停的增加,长度测量不精准。// 实际存储:['H','e','l','l','o','\0']请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则输出。:所有左括号都被匹配了(栈为空))和左右小(圆)括号构成,以。

2026-02-05 22:57:13 224

原创 C语言之产值调整(蓝桥杯省B)

在本代码中,不再像传统方法一样分配的是每种矿的产值数组,而是将三种矿都分配在一个数组中,这个数组只表示当前的产值,而不像之前的代码数组表示k年的产值。接下来的 T 行,每行包含四个整数 A,B,C,K,分别表示金矿、银矿和铜矿的初始产值,以及需要执行的调整次数。计算出 A′、B′、C′ 后,同时更新:A 变为 A′,B 变为 B′,C 变为 C′,作为下一年调整的基础。对于每个测试用例,输出一行,包含三个整数,表示经过 K 次调整后金矿、银矿和铜矿的产值,用空格分隔。例如,⌊3.7⌋=3,⌊5.2⌋=5。

2026-02-05 21:47:19 607

原创 C语言之可分解的正整数(蓝桥杯省B)

最大公约数和最小公倍数”的公式是根据一个数是由因子和另一个数的乘积,所以让这两个数相乘就可以得到某个公式了,再处理化简一下就可以了,而本道题目公式就是根据等差数列公式推导出来的,2S = n * (2k + n - 1)得出了一个乘积的公式,而n就是因子,同时也是分解出来的整数个数,这样就可以写条件了,只要条件成立,即可得到符合题意的值。例如,[1,2,3]、[4,5,6,7] 和 [−1,0,1] 是符合条件的序列,而 [1,2](长度不足)和 [1,2,4](不连续)不符合要求。

2026-02-05 16:32:57 1031

原创 动态规划——01背包问题

包括物品和背包,但每个物品的数量只有一个,所以只需要考虑选一个和不选两种情况。有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。,求解将哪些物品装入背包里物品价值总和最大。在下面的讲解中,我举一个例子:背包最大重量为4。问背包能背的物品最大价值是多少?

2026-02-05 10:45:20 1122

原创 计数岛屿——深搜+广搜

给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。

2026-02-03 17:40:33 785

原创 深度优先搜索dfs(附带例题)

假设从1走到5,再由5走到6,到达目的地,开始去搜索其他方向,撤销离结束最近的一条路径,也就是从5到6的这条路径。撤销4到6的路径,4到3,3到6,回溯到3,再由3到2,2到4或到1都是访问过的点,所以2回溯到3,由3再到目的地。根据上述result[0] → [1, 2, 4],说明还需要一个变量来表示1,2,4这些可以到达目的地的节点,即可以到达目的地的节点数目,通过for循环将节点都存储到这条路径中来,所以result第二个[]用i来表示,但范围是节点数目,用变量path_size来表示?

2026-02-02 17:09:43 1266

原创 动态规划习题篇(不同路径和整数拆分)

但是我忽略了,如果这个位置正好是障碍物,那就会执行跳过障碍物的语句,即continue,跳过递推公式后就没办法通过前面来计算当前位置的路径数,所以在计算后面位置的路径数的时候,就会以它的初始值进行计算,而如果不初始化,那它的值就是垃圾值,所以得到的也是垃圾值。就不应该初始化,也就是没有意义的数值,无法知道拆分后的乘积是多大,但初始化为0也可以,因为可以将乘dp[0]的值变成0,反正乘dp[0]的值也不知道拆分后的是多少。3*3//同理将3拆开,包含2的可以在2*3中得到,包含1的可以在1*1中得到。

2026-01-31 19:01:30 1332

原创 动态规划(附带入门例题)

1.动态规划数组(dp数组)的定义以及下标的含义。例如:在李白打酒中f[i][j][k]表示方案数,i表示经过店的数量,j表示经过花的数量,k表示剩余酒的数量。2.递推公式或状态转移方程3.dp数组是如何进行初始化的4.遍历顺序5.打印dp数组的值题型:有多少种方案。枚举大多数情况下不行,搜索通常也不行,但是可能会成功。所以我们这个时候考虑动态规划。1.定义数组:时刻记住你定义的数组的含义及下标。注意有时题上会帮我们定义,但是有时也会误导我们。 2.写状态转移方程。有两种写法:f[i]由什么转移过来。

2026-01-30 22:47:07 1219

原创 C语言之李白打酒(蓝桥杯省B)

上述代码的初始化是根据题干意思,没有经过店和花,所以i=0,j=0,一开始剩余的酒是2斗,所以要初始化f[0][0][2]这个确定的状态。这一路上,他一共遇到店 N 次,遇到花 M 次。已知最后一次遇到的是花,他正好把酒喝光了。f[i][j][k]表示的是方案数,而对于上述状态只有一种方式到达,因为一开始就在那里。出现这么多符合题意的情况,主要是两种情况共同实现的:最后一步遇到店或最后一步遇到花。一天,他提着酒壶,从家里出来,酒壶中有酒 2 斗。因为是累加,所以输出的最后一个状态的方案数就是总方案数。

2026-01-30 16:40:43 811

原创 C语言之宝石组合(蓝桥杯省B)

所以根据推导得到的公式,发现S与x,y,z之间的关系,因为x, y, z 是 Ha,Hb,Hc​ 分别除以它们的最大公约数 d 后得到的数,所以可以把d同时乘上,实际上得到的是s与Ha​,Hb​,Hc​之间的关系,只需要得到关系即可,不需要通过这个公式求任何数。首先明确要找的是三个数,这三个数的最大公约数是所有公约数中最大的那个,而这三个数是能被这个最大公约数整除的三个最小的数。因为要找的这个约数是最大的,所以从最大的开始遍历,只要出现至少3次的约数,就立即结束循环,这个肯定是最大的约数。

2026-01-29 17:27:06 892

原创 C语言之合并果子

而我一开始认为的是第一次先合并最小的两堆,之后要再将这一堆与后面没有合并的最小的一堆合并,然后再将新合并的这一堆与后面没合并的最小的一堆合并,以此类推……实际上是不对的,因为新合并的那一堆有可能不是最小的两堆中的一堆,所以结果肯定不对。例如有 3 种果子,数目依次为 1,2,9。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12,耗费体力为 12。假定每个果子重量都为 1,并且已知果子的种类 数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。

2026-01-28 19:24:10 906

原创 高精度例题——(蓝桥杯省B)R格式+阶乘之和

因为我们是将数字当作字符来处理的,所以字符数字对应的是ASCII码值,并不是数字。字符‘0’的ASCII码值是48,所以只有每个字符数字减去字符‘0’的ASCII码值才是真正的数字。这道题目主要就是从没有想过十进制小数进位应该把它们一个一个的放到数组中,一个数字一个数字进行处理,即逐位进位。十进制数进位规则:逢十进一(例如:某一位是9,9+1=10,个位归0,十位进1)而且一次就乘2的n次方,如果n特别大的时候,pow(2,n)可能溢出或精度损失。再就是我的方法受double精度限制,不能处理特别大的数。

2026-01-28 15:16:17 815

原创 广度优先搜索(之马遍历)C语言

拿出这个节点来计算上下左右四个节点,记录下来,将搜索到的节点分别加入到这个队列里边,(如果有距离计算,此时也要计算了)此时节点11已经是处理过的节点了,就要将它从队列中拿出来(也就是双指针中队头指针移动,是处理队列中不包含这个节点)。所以要表示新位置,就是当前的位置坐标加上要走的方向坐标,然后求得的结果就是新到达的位置。再以四周节点的其中一个,7为下一个要搜索的节点,再去搜索7的四周的方向,即3,6,8,11,这个节点处理完之后,再处理下一个开始的节点,即10,之后再是12,15,3,6,8。

2026-01-27 16:56:37 904

原创 C语言之切蛋糕(运用前缀和算法和单调队列算法)

q[]数组的值是sum[]数组的下标,通过q[]数组进行窗口滑动,来保证sum[i]-sum[j]是不超过m块的,且是这几块的和。先计算作差再进行单调性维护,因为经过一次次循环,已经放到队列中的元素sum[]的值肯定是最小的,也就是最优的,所以先计算才可能是得到历史最大sum,而如果先维护再进行作差,可能将历史最小sum全部删除,最后只留下新添加的元素,这肯定是不对的。进行第二次循环时,把i=2加入到q[]数组中,队列变[0,1,2],sum[2]-sum[0]刚好是第二个元素和第三个元素的和。

2026-01-25 22:57:52 722

原创 前缀和算法和单调队列算法(经典例题)

hh=1, tt=0//tt表示的是插入元素后的队列元素的下标,而该队列由op[]数组表示,op[]数组的值,即为a数组的下标。操作:删除队尾 3(≥1)//当要插入数组a的第二个元素的时候,一开始的时候还没有将1插入,a[2]=1只是当前要插入的元素,,用当前要插入的元素与已经插入的元素进行比较,发现第一个元素3大于1,不符合单调递减的条件,所以要将3删除,tt--,所以tt变成了0,正好进行下面的操作op[++tt],把刚刚要插入的元素插入到队列中,变成队列中的第一个元素;上述代码保证队列的完全清空。

2026-01-24 22:13:30 737

原创 C语言之5位黑洞数

一开始的时候,还没有填充all_cycles数组内容,所以不会先执行上述的for循环,而是执行下面的if条件,都满足条件,把int all_cycles[0][1];数组的第一行填充完毕,填的是第一个有循环圈的五位数的循环圈,没有比较,所以一定没有重复,所以直接添加到列表中。先找是否有相同的循环圈,然后再添加到列表中,是因为cycle表示的是当前发现的循环圈数组,而all_cycles[i]表示的是已存储的第i个循环圈,二者比较,看看是否重复,决定当前的循环圈是否列入all_cycles[i]。

2026-01-17 00:20:31 693

原创 C语言之串的简单处理

但是在找到下一个首字母的时候,要将其再转换成0.同时,要将该字符即下一个字符的前一个字符prev_is_space=0.(是字符,不是空格)因为一开始的字符肯定是该行字符的首字母,所以就要将其赋值给输出数组的第一个output[j],一开始定义j=0.之后不满足首字母的条件了,就要执行下面的else语句了。而且还有点小错误……同时,读取下一个字符的时候,当前字符为下一个字符的前一个字符,非常明确。只有整个单词结束后的第一个空格才是我们要找的空格,是赋给输出数组的空格,所以前一个必须是字符,不可能是空格,

2026-01-14 23:48:08 534

原创 C语言之猜算式

上述代码中的if条件语句判断,因为右边两个数字中右边的那个已经是三位数确定了,所以右边两个数字不可能发生交换,所以只需要判断左边两个数是否交换顺序,因为for循环的外层循环是第一个数字,内层循环是第二个数字,所以可能出现两个交换顺序的情况,此时就要利用该代码来判断是否重复,最终只需要输出一个即可。之后就符合上述for循环了,用于判断当前找到的等式是否与之前输出的等式重复,如果重复,那就duplicate = 1;但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。如果没有限定条件,这样的例子很多。

2026-01-12 22:23:21 562

原创 C语言之泊松分酒(油量倒换)

最后找到目标状态返回的只是路径长度,而这个路径长度回溯回去就是result的值,那result的值肯定不是-1,所以会执行每一部分里面的if语句,返回result的值,有正确值肯定不是-1,所以会执行主函数中的for循环,是正序的,关键就在这里。如果没有路径数组,则会输出所有状态,无论是正确路径还是错误路径上的状态,这就不符合题意了,而路径数组有覆盖功能,所以会把错误路径上的状态覆盖,只输出正确路径上的状态。而按字符的形式输入,如果在输完之后,即使有空格,只要不符合上述if语句的条件,则不会影响什么。

2026-01-11 22:56:44 556

原创 C语言之砝码称重

但上述题意明确表示,砝码可以放在左右两个盘中,所以允许负系数,所以cᵢ ∈ {-1,0, 1},cᵢ表示的就是某个砝码重量的个数和放的位置。如果只有 5个砝码,重量分别是 1,3,9,27,81。· 最终:(-1)×3 + (-1)×1 = -3-1 = -4(不对)· 正确:5 = 9 - 3 - 1(即三进制:1(-1)(-1))· 十位:1+1=2 → 又变成2,再变-1,向更高位进1。· 如果某位是2,则将其变为-1,并向高位进1。· 处理个位:2 → -1,向十位进1。· 1:砝码放左盘(加法)

2026-01-11 16:40:43 241

原创 OJ1009:University

上述三个中的一个情况,就会结束输入。字符: 'I' 'l' 't' 't' 'a' 'b' 'a' 'j' 'e' ' ' 'z' 'a' 'u' 'j' 'l' 'i' 'g' '\n' '\0'3. strlen(line) 返回 5('t','e','s','t','\n')//返回字符串的长度不包括字符串结束符,但包括换行符。字符: 'H' 'e' 'l' 'l' 'o' ' ' 'W' 'o' 'r' 'l' 'd' '\0'。字符: 'H' 'e' 'l' 'l' 'o' '\n' '\0'。

2026-01-08 16:44:08 547

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除