- 博客(9)
- 收藏
- 关注
原创 关于rand()和srand()函数
觉得这段写的还不错使用rand()函数可以返回一个随机数,范围在0~RNAD_MAX(定义在 stdlib.h 中,值为 2147483647)之间。那么如果我们想要生成指定范围内的随机数该怎么做呢?这里就不得不提到我们的%运算符,在控制范围时经常使用的一个小工具,通过它我们可以完成范围的上限的确定,比如:rand()%10,可以让我们得到一个010的随机数。那么下限呢,在此基础上,我们可以把%看成是一个区间长度控制器,于是乎,当区间长度卡死的情况,我们只需要控制开始的数值,就可以完成对区间的控制,于是
2021-10-10 14:31:28
284
原创 输出二叉树某节点的所有子孙
这个题目的处理方式非常巧妙利用了先序遍历时,输出自身之后全是子树,以及后序遍历,输出自身之前全是子树的这样的特点于是我们可以用两个遍历,卡死中间的子树那么用一个flag表示需要输出,那么一旦先序遍历到该点,意味着该点之后的可以输出,则flag=1,一旦后序遍历到该点,意味着该点之前的可以输出,而之后的不能输出了,则flag再次置为0bool flag;void Decendents(BiTree T,TElemType e}{ if(!T) return; if(T->data=
2021-06-18 19:51:36
1616
原创 图论——Dijkstra求最短路的直观理解方法
Dijkstra算法本质上是一个贪心的思想首先我们将所有的点分为已经找到最短距离和还没找到最短距离两部分,进行一系列初始化之后,开始对点进行循环,每一次都找到当前的最短点,将他放入已经找到最短距离的桶里,再利用这个当前的最短点,松弛其他所有的点,从而更新每一个点当前所谓的最短距离,当所有点都放入最短距离的桶中时,那么所有的点都算出了起点到这个点的最短距离那么首先我们需要有一个from节点,还需要一个dis数组,用来记录所有节点到from的最短距离,还需要一个vis数组,用来表示是否进入最短距离桶说了半
2021-06-14 21:12:06
188
1
原创 数字分解的套路与陷阱
我发现这个数字分解,在各种题目之中屡屡出现,于是就想着来写写这篇文章数字分解呢,简单来说,就是把一个数的每一位给它分开,然后进行操作有的同学(就是我 )一看这个东西啊,就说,诶,我们整个string不就完事了嘛,多爽啊,直接变成类数组的形式,想搞哪位搞哪位,岂不是爽歪歪。确实(STL yydshowever,你会发现,如果这个数是输入进去的的确string很爽,但是如果他是在计算过程中需要对单独数字进行操作呢,你恐怕还是要int转string(虽然我们有sprint和sscanf让我们试试手动模拟
2021-02-04 22:57:54
273
原创 【C语言】聊聊辗转相除法
辗转相除法,又名欧几里德算法。用于计算两数最大公约数(gcd)主要思想是:gcd(a,b)=gcd(b,a%b) (a>=b)原理证明也很简单:先不妨设a=kb+r,a=cx,b=cy(c为最大公约数,也即x和y已无公因式)r=a-kb=c(x-ky)=>说明c是约数,那么只需证明c是最大的公约数,也即x-ky和y无公因式即可这里的证明采用反证法假设x-ky=md,y=nd (d>1)则x=md+ky=md+knd=d(m+kn)a=cx=(m+kn)cd,b=c
2020-12-13 14:39:23
668
原创 【c语言】当你只会循环时,你也可以打印出好看的图案
当你已经学会了循环,这时加上顺序,选择结构,你已经将三大结构学会了,这时我们可以利用已学过的内容打印一些好看的图案在我看来,打印这些图案的核心思想在于构造一个类似矩阵或者坐标系的东西,理所当然地我们用i和j表示行和列,那么每个格子都拥有一个坐标,你只需要确定哪些格子应该有填充物,哪些没有,这样就可以构造出一些你想要看到的图案。就像是绘画一样,你利用线条的粗细和空白可以构造出一个极度逼真的图像,但在这里,让我们先从大一些的地方来做举个例子譬如我们想打印一个菱形,并且我们希望能从外界输入这个菱形的一半(也
2020-10-31 21:13:32
836
原创 聊聊循环的小套路——取一个变量代表一个事件
当我们要解决一些问题时,碰到的并不都是能轻易验证为真的问题譬如我们想要求一定范围内的素数,运用循环结构,只有在最后一个循环执行完之后,我们才能够真正判定,这个数确实是素数。再比如在鞍点问题中,我们只有在一行的循环都走完之后,我们才能下结论说:这一行的鞍点不存在。于是在更加复杂的嵌套循环中,似乎寻找判定条件会变得越来越艰难。因此,在这里我们采取引入变量的方式来解决这个问题从素数问题讲起在这里插入代码片...
2020-10-31 16:53:34
182
原创 【c语言】虚数的输出
在c语言中,如果直接在公式中输出i,编译器会将其当成一个变量,且是一个未定义的变量,从而出现错误。所以我们需要采取一种方式,巧妙地回避这样的问题即将复数的实部和虚部分别输出举个例子,当我们用程序解ax2+bx+c=0时,会出现b2-4ac<0的情况,此时需要使用虚数倘若我们直接将公式打出x1=(-b+sqrt(-b*b+4*a*c)*i)/(2*a);x2=(-b-sqrt(-b*b+4*a*c)*i)/(2*a);则会出现这样的报错提示因此我们可以采用这样的方式,巧妙地避开了这样的问
2020-10-08 19:04:36
9716
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人