how to get the variable length string in C?
here is one of the solution
1 |
|
here is one of the solution
1 |
|
思路:假设我们想找出 2 ~ N 之间的所有质数:
先假设 2~N 都是质数。
从 2 开始,把它的所有倍数(2×2, 2×3, 2×4…)都标记为合数。
再找到下一个未被标记的数(一定是质数),然后把它的所有倍数标记为合数。
不断重复,直到处理到 √N 为止。
剩下所有未被标记的数就是质数。
1 | // 初始化 |
compared with vise of esteranis, this vise would’t get any re-count if its not prime, let start
1 | C form |
已知三个正整数 $a$,$b$,$c$。现有一个大于 $1$ 的整数 $x$,将其作为除数分别除 $a$,$b$,$c$,得到的余数相同。
请问满足上述条件的 $x$ 的最小值是多少?数据保证 $x$ 有解。
一行,三个不大于 $1000000$ 的正整数 $a$,$b$,$c$,两个整数之间用一个空格隔开。
一个整数,即满足条件的 $x$ 的最小值。
1 | 300 262 205 |
1 | 19 |
一道入门问题,只为了完成该任务直接选择无脑循环即可,但是从题目给出的数学角度出发,可以引入辗转相除法:
1 | int gcd(int a, int b){return b == 0 ? a : gcd(b, a % b);} |
三元运算符节省空间,函数调用步进提供最大公约数,三个多个都一样,套娃就ok。但是他题目要求的是大于1的最小的公约数,这里就牵扯到了质因数分解,因为所有公约数都蕴含在最大公约数里,考虑设计方法求出所有质因数:设计循环,从2开始,每一个数都除干净,
1 | 循环上限为 <= sqrt(n) 的所有质数,因为如果a <= b, a * b = n; 那么 a * a <= a * b = n; |
用上述方法我们就将公倍数质因数分解成功,并从中找到了最小的非1公倍数!
文章结构根据学习路线进行逐级更新,在学习与工作中存在问题也会同步更新,学习路线如下:
1.
《深入理解计算机系统》 && 《C Primer Plus》
刷题:
《数据结构、算法与应用》 && 《C++ Primer》
可选补充:《算法导论》
刷题:
刷题建议:
《Linux内核完全剖析》 && 《Linux内核完全注释》
配合阅读:《计算机网络》
刷题建议:
《C++Primer》进阶 && 《算法导论》
将矩阵分成两个或更多矩阵的乘积,起到简化计算的作用
LU分解:A为mxn阶矩阵,可以写成形式为A=LU,其中L是mxm下三角矩阵,可逆;主对角线元素全为1,U是mxn的阶梯型矩阵,此时方程Ax=b变化为LUx=b,可拆分为Ly=b与Ux=y。此时由于拆分方程1和2都是三角矩阵,方程易解。
求解方法:仅使用行倍加变化,将A变换为U,即A=LU,同时可以证明,单位下三角矩阵的乘积和逆也是下三角矩阵,若不可能,L的元素满足用相同的一系列行变化把L变为I。
直观感受算法优势:计算nxn的稠密矩阵A直接计算A.^(-1)需要2n.^3次浮算,A.^(-1)与b乘需要2n.^2次浮算;LU分解大致需要(2n^3)/3次浮算,解Ly=b与Ux=y大约需要n.^2次浮算。同时应注意,实际中矩阵A可能稀疏,然而A.^(-1)很可能是稠密的,此时用LU分解可能会快得多。
扇出是为解决Layout中针对多引脚封装的布线繁杂问题。两层板设计一般一面横线,一面竖线,起码保证两扇出过孔间有能加入一条横线,以MCU为例,参考扇出如下图所示,广义上的扇孔其实是针对一个模块把内部连接完成,把外部需要的线全部打孔占位。
9e8ffe6 (更新)
拉线为保证连线更加美观,将元件的所有引脚聚成一股拉出,减小漏连概率且提高观赏性,参考拉线如下图所示
尖角铜指铺铜时由于结构原因,区域限制导致铺铜出现宽高比非常小的部分,该部分在实际电路运行时往往会导致电信号回流,对板结
构产生较大影响!,实际设计中需要予以避免消除。
解决思路:能打地孔则打孔,无法打孔则设置禁止区域重新铺铜。
=======
尖角铜指铺铜时由于结构原因,区域限制导致铺铜出现宽高比非常小的部分,该部分在实际电路运行时往往会导致电信号回流,对板结构产生较大影响!,实际设计中需要予以避免消除。
解决思路:能打地孔则打孔,无法打孔则设置禁止区域重新铺铜。
9e8ffe6 (更新)
定位孔一般在附近增加1mm来设置禁止区域,防止由于定位元件(螺钉)导致的短接。
继电器
小封装电阻电容内部禁止穿线
电感:电感器件下方尽量避免走线,同时所在层需要挖空铜皮处理,如果电感附近有走线,需要对信号线包地处理。
晶振:为时钟提供基准信号,决定电路的稳定性,布线时严禁在晶振中横穿其他信号线,同时尽量避免在晶振下方或附近布置高速信号线或电源线。同时应使用差分走线方式,并在晶振周围进行包地线处理(法拉第笼增强抗干扰),并且在晶振背面进行完整地平面铺设。
蓝牙模块:蓝牙模块在 PCB 设计时,在 PCB 布局布线空间充足的情况下建议设计模块内区域保持禁空,不进行信号布线且不进行布局其它器件在模块区域内部。
如果空间足够,尽量避免过孔直接打到焊盘上(美观加上可能会有焊料损失,焊接不牢固)
过孔,仅仅只是在顶层连接,且内层底层之间没有进行任何连接,即为天线过孔,天线过孔同样是会形成天线效应,会接受其他的信号干扰源。
电机电路驱动线要进行加宽处理,保证电机驱动功能正常。
一般常用PCB常用电源模块有LDO,开关电源和PMU电源,因此主要针对这三种模块进行设计规范。
以LDO核心元器件布局。
滤波电容按照先大后小原则,尽量靠近芯片引脚摆放。
电源输入输出端尽量远离,避免噪声耦合。
主干道处理,以铺铜代替布线。
如果有Datasheet,以其推荐原理图设计布局,注意回流路径越短越好。
与LDO滤波电容摆放需求相同
使相邻电感垂直放置,大电感和大电容尽量布置在主器件面。
尽量保持单点接地,于主器件下方回流至地,避免开关噪声沿地平面传播。
开关电源模块内部信号互联线尽量短而粗,原理干扰源。
中间散热焊盘建议双面开窗
以PMU为中心,先考虑DC-DC(参考3.2),再考虑LDO布局(参考3.1)。
BUCK部分需要输入输出电容就近可靠接地,接地点靠近,做到回路尽可能短。
PMU的I2C走线尽量避免同层或者隔层的干扰
元件面、焊接面为完整的地平面。
关键信号与地层相邻,不跨分割,如不可避免,要适当加跨接电容
形成信号回流通道。
优先电源平面和地平面紧耦合。
关键电源有一对应地平面相邻。
对于PCB上小范围内用到的电源如某个IC芯片的核心工作电压,尽
量在信号层上灌铜解决。
平面的分割宽度20~30mil。对于模拟电源和数字电源的分割宽度需
适当加大,以防止数字电源对模拟电源的噪声干扰;压差大的电源
也需要增加。
电源平面分割要尽量保持规则,不允许有细长条及哑铃形分割;注意电
源瓶颈的出现。
相邻层不同的电源平面要避免交叠放置,以防止噪声的互扰。
模拟电源和模拟地;数字电源和数字地,在平面层分割时要严格分开,
不要在平面上存在容性耦合。
电源的分割区域要正确,模拟电源区域上要避免有数字信号和数字器件,
数字电源区域上要避免有模拟信号和模拟器件,以防止噪声的互扰。
电源层要比地层内缩1mm,并在内缩区域每隔150mil打屏蔽地过孔。
输入端电源建议大面积两面同时铺铜处理
接口靠近板边放置,方便拔插;
ESD器件靠近接口放置,走线需先经过ESD器件(ESD器件是防浪涌 与稳压管不同 原理图看着很像 注意区分)
在元件布局时,使差分线路最短,以缩短差分线走线距离。
EMI滤波器或共模电感需靠近USB插座放置,防止电磁辐射;
USB2.0接口需注意2.2ohm电阻, USB3.0接口TX N/P需要注意AC耦合电容布局,都需要靠近接口摆放;
阻抗要求控制:USB差分阻抗Zdiff为90Ω(常规差分阻抗一般为100Ohm、差分地过孔回流);
USB差分需要进行打孔包地,差分换层处需要打屏蔽地过孔。
差分需要进行对内等长,误差为±5mil;
如若在设计中有使用保护地,保护地的线宽>=100mil保护地和信号地之间的间距>=40mil;
USB3.0以上所有信号都需要进行对间等长(对间指不同的差分信号间);
USB3.0 SSTX N/P,RX N/P,换孔尽量不要超过2个,信号完整的参考平面,信号不能进行跨分割(跨分割:从另一个层面相对不同的完整参考平面跨过去了 会导致信号没办法做信号阻抗
事实上无法做所有信号线跨分割 所以只需要针对所有的等长信号不要跨分割即可);
个人简单介绍:
动物界->脊索动物们->哺乳纲->杂食目->人科->人属->智人
希望能通过自己的努力,在人生短暂的几十年中
不断追寻自己想要的东西。通过站在巨人肩膀上眺望得到的见识做出大众真正需要的电子产品。
时间轴:2002.5.24 来到这个世界
2020-2024 哈尔滨工业大学 精密仪器 本科
2025- 清华大学 仪器仪表工程 硕士
个人爱好:技术,运动,美食,乐器,FPS游戏狂热爱好者
现在来看,终于没有了升学的烦恼,可以把自己的身心完全投入进技术之中了。
[]1.使用c与c++,把codeforces的和洛谷的题全部刷一遍。
[]2.看完《匠人手记》 并尝试做出一个让自己满意的机器人。
[]3.六级考六百分以上(只能等下半年了,但是听力要早点练)。
[]4.今年到明年3月,积攒相关技术栈,明年暑假实习一定要去其中一家,(大疆、OPPO、影石、德州仪器):按照相机工程师的标准,
对嵌入式软硬件的学习需全面发展,循序渐进。
[]5.通关深圳IO
[]6.看完《工程控制论》 《自动控制原理》并以此来加深matlab的使用(看了很多家企业,对于控制的学习还是需要进一步加深的)。
[]7.通过《机械设计》来加深对solidworks的使用。
[x]8.有一定的资产积累
[]9.坚持运动
[x]10.成为清华大学的研究生
[]11.健康生活(此处应该主要指的是早睡早起和健康饮食)
[]12.学会吉他所有的弦
[]13.加深对PCBLayout的印象
[]14.阅读至少十本专业书籍。
[x]15.趁着自己还有时间,出去旅游。
[完成]8.有一定的资产积累
[]9.坚持运动
[完成]10.成为清华大学的研究生
[]11.健康生活(此处应该主要指的是早睡早起和健康饮食
[]12.学会吉他所有的弦
[done]13.加深对PCBLayout的印象
[]14.阅读至少十五本专业书籍。
[完成]15.趁着自己还有时间,出去旅游。