- 博客(29)
- 收藏
- 关注
原创 弗洛伊德判环算法
m为环外路径,n为环的长度慢m+kn快:慢的两倍m+m+2kn快-慢:快慢相遇,所以快比慢多跑t圈m+kn=tn此时慢从头开始,走m步到达起点,快也走m步:2m+2kn+m=m+2tn所以此时快指针的位置是环起点后转了2t圈,所以又回到了环起点。...
2021-03-28 14:38:26
373
原创 C语言//注释使下一行代码失效
在最近写代码时,发现下面这几行代码if后的语句有问题if(ptr->node->flag==1) //在文件夹前输出/printf("\");printf("%s “,ptr->node->name);ptr=ptr->next;实际上就是因为printf(”\");被注释掉了
2020-12-27 20:42:59
1056
原创 圆环涂色问题
圆环涂色问题:不考虑环形去序本来我想的是第一个是m,后面是m-1,最后一个是m-2,但也可能倒数第二个和第一个是同色的,那么最后一个就可以是m-1了。所以全部取m-1,然后用上面的递推方法可以求得结果...
2020-11-04 16:35:47
521
原创 圆环排列问题
在圆环中排列时,n个人的排列方式为n!/n=(n-1)!因为第一个人落在哪里都等价,只有第一个人落位后才开始排列,因此除去第一个人的n种情况
2020-11-04 16:32:57
2688
原创 动态规划习题,关系式推导和求模技巧
#include <stdio.h>int dp[100001]= {0};int main(){int n,i;scanf("%d",&n);int mod=100003;dp[0]=dp[1]=dp[2]=dp[3]=1;//dp[i]=dp[i-1]+dp[i-4]+dp[i-7]…//dp[i-3]=dp[i-4]+dp[i-7]+dp[i-9]…i-3后面有的项和dp[i]是一样的//dp[i]=dp[i-1]+dp[i-3]for(i=4; i<=
2020-10-11 12:17:44
96
原创 Socket连接外网的思考
在过去使用socket编程的时候,连接的ip都是127.0.0.1也就是本地地址,之前也试过去连接公网ip,想要实现日常使用的网络通信功能,但是在连接时就失败了。在网上查到想实现在公网通信,服务器必须要有公网ip,这样才能被访问到。一般的方式是租用云服务器,获取公网ip。而本地的电脑一般情况下是在内网中通过nat使用一个公共的公网ip,不能够被外界访问,因此另一种方式是使用端口映射,将内部ip的端口映射到公网ip的端口,这样服务器能侦听到公网ip的端口信息,可以被外界访问...
2020-10-10 22:39:02
2094
1
原创 递归图形绘制
题目如下这个图案是由2n-1行2n-1列的字符构成的,其递归定义如下: 如果n=1,它是1行1列的字符方阵,即一个字符,这个位置上的字符是’+’,表示十字架。 当n>1时,这个字符方阵被中间的一个大大的十字架(用+,-,|表示)递归地分解成大小相同 的四部分,每一部分是一个2(n-1)-1行2(n-1)-1列的字符方阵。使用递归函数,每轮递归画出中间的架子,然后将左上右上左下右下四个部分进行递归,当n等于1时直接画一个加号,跳出递归...
2020-07-14 17:12:24
835
原创 二叉树结点入度等于出度
根据这一定理,可以衍生出许多计算题例如给出不同出度的结点个数如出度为2的点有a个,1的有b个,求叶子结点数首先要知道一棵有n个结点的二叉树,总入度为n-1,因为除了根节点外每个结点的入度均为1因此可以列出方程计算n-1=a2+b1+x又例如问线索二叉树的线索数n个点的二叉树共有2n个可以放置线索的位置,其中出度等于入度等于n-1,剩余可以放置线索的位置是 2n-(n-1)=n+1...
2020-06-29 21:45:00
4178
原创 字符型变量溢出问题
C语言char类型为8个bit,1位符号位,可表示范围为-128到127在计算时可能产生溢出例如要把小写字母循环后移,z的ASCII码为122char c=‘z’;c+=10;执行后,c的值就是负的了
2020-06-29 18:02:13
941
原创 向一个有N个元素的顺序表中插入一个元素,平均要移动的次数为多少
N个元素的顺序表可插入的位置有N+1个,移动次数总数为0+1+2…+n=(0+n)*(n+1)/2平均次数为 总数/(N+1)= n/2
2020-06-29 11:39:31
17984
原创 哈夫曼树和哈夫曼编码
哈夫曼树构造方法,把一开始的各个点看作一颗颗树,取权值最小的两棵树组成一颗新二叉树,新树权值为两点之和,放入森林中取代原来的两个结点。一直重复直至只剩最后一颗树哈夫曼编码方法,把各个字符作为结点,权值是字符出现的频率,构造出哈夫曼树,各个字符最终都出现在叶子节点上,然后从根节点到某字符的路径,向左为0,向右为1,得到哈夫曼编码E为00B为010...
2020-06-26 10:32:49
204
2
原创 fclose的作用
fclose有两个作用:将输出缓冲区内容写到存储设备上释放对应的资源如果不调用fclose,相应地,可能会造成对文件的更改没有被记录到磁盘上其他进程无法存取
2020-06-12 22:32:31
3124
原创 C++传引用
C语言里只能值传递,要修改实参得传指针,C++里可以传引用,此时形参和实参是同一个变量,可以直接修改实参如void InitList_Sq(SqList& L)调用时直接写InitList_Sq(L)即可对L进行修改
2020-06-09 15:54:27
183
原创 字符转换16进制输出
printf 的%x格式有符号数把最高位当做符号位无符号数则把最高位正常看待%x的输出,其实是把字符型转成16进制整型输出如果字符型是无符号的,那么转成整型之后,也认为是无符号的int,内存只占用8位 只会输出两个16进制数而如果字符型是有符号的,那么转成整型之后,内存占用32位 ,前面会有一堆fffff也就是无符号的char按整型输出,是无符号int如果有符号的char按整型输出,那就是有符号的int...
2020-06-08 13:06:09
723
原创 节拍电位表示一个CPU周期的时间,而节拍脉冲把一个CPU周期划分为几个叫较小的时间间隔
节拍电位表示一个CPU周期的时间,而节拍脉冲把一个CPU周期划分为几个叫较小的时间间隔
2020-06-02 21:01:00
1578
1
原创 C语言二维数组的指针写法
C语言中二维数组要用Int** 来表示,在分配空间后,int**加一会移动到下一行。而m行n列的二维数组的寻址方式是首地址a+in+j,因此先对a+i找到相应的行,也就是一维数组,并且取得到一个int指针,再加上j,再取值即为二维数组中的一个元素...
2020-06-02 12:20:24
814
转载 mac目的地址和源地址
https://zhidao.baidu.com/question/457424520349906925.html经过路由器时,修改目的mac和源mac,ip不变经过交换机时,都不修改
2020-05-27 11:03:55
4003
原创 GCC命令格式
直接 gcc main.c 时,生成可执行文件a.out参数-o 用于修改生成文件名 -o后面紧跟的即为文件名gcc -o main main.c-g 用于生成调试信息,使程序可以在gdb调试gcc -g main.c...
2020-05-04 22:07:41
995
原创 C 语言读写中文出现乱码
使用 fopen 打开一个utf-8的txt文件,然后用fscanf读取字符串,输出发现是乱码,显示的是用ANSI编码的对应字符并且在写入文件时,新产生的文件也是ANSI编码的一开始怀疑文件编码是fopen函数决定的,所以在打开方式后加上了css=utf-8,但是这样子反而导致文件无法打开了。后来我怀疑文件编码不是fopen决定的,于是我注释掉了fwrite函数,然后惊讶地发现创建的txt...
2020-04-29 23:28:17
10691
3
原创 二进制数代替数组做标记
今天做一道输出第一次出现的数题目时,使用了用一个数组存储之前出现过的数,然后搜索数组判断是否出现过。这是用时间换空间的方法。当然也可以用空间换时间,如果数据范围已知且不大,比如为1到100可以直接定义一个大小为100的数组 初始化为0输入一个数时,若a[i-1]为0则输出,并对a[i-1]做标记然后想到了用二进制数作为标记的方法,进一步节省空间。但是只能用于数据范围很小的数 比如0-30...
2020-04-22 17:37:05
327
转载 为什么分数是循环小数
如果一个既约分数的分母是由2、5以外的质因数组成,不妨设分子抄小于分母。分子除以分母m所得余数的个数最多m-1个:1、2、3、……、m-1,至多除m-1次,余数会重复袭出现,商也就开始重复,化成的小数...
2020-04-19 09:37:48
430
原创 关于内存
指针与数组虽然数组名是指向数组首地址的指针,但指针和数组的区别就是,创建数组时,会分配好一定大小的空间,然后数组名指针指向该片空间,而创建指针时并不会分配空间例 char* s=“hello”;是使得指针s指向常量区的hello字符串,此时若修改该字符串,则会产生错误。因为常量区内存不可修改而 char s[]=‘hello’;则会分配一块内存,并修改内存内容为“hello”,s指针不指...
2020-04-07 12:56:56
80
转载 n个数进栈后输出的可能序列数
本题的描述十分简单。n个数依次进栈,可随机出栈。求有几种可能。解释一下原理:建立数组f。f[i]表示i个数的全部可能性。f[0] = 1, f[1] = 1; //当然只有一个设 x 为当前出栈序列的最后一个,则x有n种取值由于x是最后一个出栈的,所以可以将已经出栈的数分成两部分比x小的数有x-1个, 所以这些数的全部出栈可能为f[x-1]比x大的数有n-x个,所以这些数的全部出栈可能...
2020-04-06 20:28:57
834
原创 洛谷 单词方阵
洛谷 单词方阵数组不同方向的坐标处理方法1.建立单位向量数组int dir[][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}每个元素为一个方向需要对某方向进行操作时,只需要对坐标加上该方向向量即可...
2019-08-07 00:01:03
192
原创 求序列逆序数
求序列逆序数整体思路是用到分治的思想,其实该问题可以在归并排序过程中解决,因此该题代码只需要在归并排序代码上增加一个变量记录逆序数即可,但正如那个修机器的故事一样,换钉子不难,但知道在哪里换钉子却是非常关键。代码如下,只是在归并排序的基础上增加了一个记录逆序数的地方void reverse(int num[],int left,int right)//跟归并排序一样{int mid;i...
2019-06-09 15:11:15
330
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人