关于程序设计:算法GCDLCM

GCD辗转相除得最大公约数。(也叫经典的欧几里得算法)a,b两个数,小的那个如果a,另一个数就变小为b%a。而后一直递归上来,就能失去最大公约数gcd。code: int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}工夫复杂度logn,十分快。上面解释下原理:1.首先a,b哪个先来被模不重要,辗转一次就肯定能失去小的那个了。2.而后进行证实:假如a=b*c+d设a=kA,b=kB。那么d=a-bc,即d=Ak-Bkc,提个k,d=A-B*c。这个时候d肯定是整数,因为整数在[加,减,乘]的运算下是关闭的。所以就模后的数就和除数,被除数有雷同的公约数,就能够有限递推上来了。 LCMcode: int lcm(int a,int b){ return a/gcd(a,b)*b;}//就很简略了。。。

April 5, 2023 · 1 min · jiezi

关于程序设计:用python代码画爱心是程序员的优雅表白

程序员怎么优雅表白?用python代码程序画爱心无比浪漫的事件。用python代码画爱心的思路是怎么的?1、怎么画心形曲线2、怎么填满心形曲线3、怎么用 python 画出爱心接下来看好了,满满的都是干货,不珍藏将是遗憾哦!第一:怎么画心形曲线这个最难的局部,前人已将大树栽好,咱们只有记住公式,即可在大树下纳凉哦!明天咱们选用中上的那个图形,一起来看看吧!第二:怎么填满爱心曲线?简略说:函数=0 是一根线, 那线的右边跟左边就是大于 0 跟小于 0.取x, y = 0 , 发现 函数 <=0 是成立的,先试试!第三:怎么用 python 画出爱心?咱们先测试一下公式:, 把公式放到 python 中, 借助 sympy 这个库,确认这个公式是否可行。from sympy import var, plot_implicitvar('x y ')plot_implicit((x2+(-y)2-1)3+x2(-y)*3)成果如下图所示:(如同还不错哦)。咱们把一行画心的代码解析一下,是这样:l2=[]# 将纵向每个字符当作 y 坐标的刻度for y in range(15,-15,-1): l3 = [] # 将横向每个字符当作 x 坐标的刻度 for x in range(-30,30): # 如果 x,y 点在心形内,则将一个字符退出到行,否则退出空字符 l3.append((' I love U'[(x-y)%9]if((x0.05)2+(y0.1)2-1)3-(x0.05)2(y0.1)3<=0 else' ')) l2.append(''.join(l3))l1 ='\n'.join(l2) for i in l1: print("\033[91m"+i,end="",flush=True) 上面这段代码,是不是跟咱们用的公式很像, 只不过做了 x y 轴的缩放:((x0.05)2+(y0.1)2-1)3-(x0.05)2(y0.1)3<=0 上面这段代码的意思是:从 ' I love U' 里挑字符进去拼行. 为毛 x-y ? 只为了斜一点, 但要求是保障它的增速为 1 . 你用 x 也行 但画进去就是正直的 I love U了。' I love U'[(x-y)%9] 咱们只须要将字符当作坐标刻度。去填满 即可!最初就是 print 管制色彩:\033[91m根本就这样,有趣味的同学能够将画心的函数都试一下.实践上都能够画进去。 只不过有一些是极坐标,要做一些转换才行。 ...

September 21, 2022 · 1 min · jiezi

设计模式使用心得

写在前面作为一名有追求的程序员,在完成项目的前提下,应该总是希望能够编写出便于阅读、便于扩展、结构良好的代码,简单概括的话,就是编写出优雅的代码。 一些团队在编码规范上,只要求了工程结构分层,并没有对如何编写优雅的代码进行更多的要求。 举个例子,团队可能要求开发Web程序时,工程有如下分层: Controller:编写控制器;Business:编写业务;Dao:编写数据库访问;Entity:编写实体类;Util:编写工具类;其中,以Business为例,团队并没有约定Business中的那些业务实现类如何设计。也许在大团队中,会有专职的架构师来对业务进行需求分析、绘制UML图、编写概要设计、详细设计。但多数团队并没有这样好的条件,更多的时候,是由架构师负责定义好技术架构,研发工程师负责进行需求实现(与业务人员或产品经理对接)。 如果是后面一种情况(研发直接负责需求实现),软件的可扩展性就完全落到研发的身上。 有些团队会因为时间紧张,任务繁重而放弃程序的扩展性,举个例子:一个功能模块编写一个业务实现类。如果是一个长期维护的项目,放弃扩展性可能会在首次研发阶段节省一点时间,但就长远来看,要付出的代价有可能会更多。 所以,如果在编写业务代码时,能自然而然的考虑扩展性,这样才能算是一名合格的软件工程师吧? 因此,我想把我从书本中学到的知识、从实战中收获的经验,进行一次全面的总结,希望自己能从这次总结中学习到更多,也希望能总结中的某一点,能对其他同行起到帮助。 参考书籍《Head First设计模式》《图解设计模式》《设计模式之禅》《领域驱动设计》《重构》《Effective Java》

May 22, 2019 · 1 min · jiezi