猫史档案馆


【算法教学-勾股数】Python和编程猫平台

用户:查看:0 回复:16 评论:0 创建时间:2017-07-15T23:27:49


我们的少院士w.rong提了个很好的问题,关于“勾股数”。

“勾股数”就是满足:

a x a + b x b = c x c

这样条件的三个正整数a,b,c。

例如 3x3 + 4x4 = 5x5,我们就称3,4,5是一组勾股数。

实际上满足这样条件的勾股数是直角三角形的三个边长。


(图片来源于网络)


下面,我们试试用“穷举”的方法来找到所有的勾股数的。

这里说一下勾股数里的a,b,c:

对于下列两组勾股数:

a=3 b=4 c=5

a=4 b=3 c=5

实际上从数论的角度来说没什么差异,因为对任意一组勾股数来说,a和b互换一定能得到一组新的勾股数。

所以为了减轻计算量(虽然对计算机而言并不重要),可以加一个条件a<b<c,这样求出所有满足这个条件的勾股数,意义更明确。

下面来开始我们的表演。


***************************我是美丽的分界线*********************************


下面我们分别用编程猫Game语言编辑器,Python语言编辑器wood两个工具来实现,求20以内勾股数的做法:

1)Python:


(注意:python是对空格非常敏感的,这里每个循环内是 4 个空格,不能用tab键,一定要用4个空格!)

英语知识:range 名词,范围的意思音标:英[reɪndʒ] 美[rendʒ]

这里要明白range函数的用法,在编程猫的Python课前几节应该有教。简单来说:

for a in range(1,20)

是这个意思:


这里用了a<b<c这个条件来简化了计算量,不然的话,其实b和c的范围从1到20其实也是可以的。


好,我们再看用编程猫Game语言编辑器怎么做:


(20以内的正整数意味着≤19)

这里需要新建三个变量a,b,c 和一个列表“勾股数”。

因为上次提到的“重复循环”默认有时间间隔,所以用编程猫平台做出来的程序算出来需要些时间,等“直接运行”模块出来以后,就会像Python编辑器一样快了。


理解了简单版的原理之后,可以看看进阶版的Python代码:


编程猫Game语言编辑器里的其实也一样,用变量存下一个询问答复的数字即可,这里就不写了。

下面附上这两个编辑器的网址:

Python编辑器:wood.codemao.cn

编程猫Game语言编辑器:ide.codemao.cn

有问题的话随时@我。


回复

上一页1 页 / 共 1下一页
ftxqgfudiftxqgfudi

沙发!

点赞0


评论


小假LittleFalse小假LittleFalse

板凳

点赞0


评论


主播喵副本主播喵副本

地毯!

点赞0


评论


ftxqgfudiftxqgfudi

20以内,但是……for循环不是在最后一个数字的前一个数停止吗……

点赞0


评论


ftxqgfudiftxqgfudi

  噫……有个东东诶

就是在py中,for循环相当于把这个变量进行赋值,然后range给出一个可迭代的东西,用for循环遍历它,就可以从第一个数到最后一个数-1不断赋值,其工作顺序应该是先给这个变量赋值,然后进行运算,再次赋值,再次运算,不过TC你的代码在最开始给变量a进行赋值,而在循环的第一行就把a加上了1,无形中把a=1的可能排除掉了,虽然勾股定理整数最小第一个是3,但是从意义上来说也是不一样的。

点赞0


评论


ftxqgfudiftxqgfudi

然后吐槽下,IDE的循环速度……我要吐血了……半分钟才把i循环到4……

对了,我把abc换成ijk了,py2强迫症。

点赞0


评论


苏某苏某

厉害!

点赞0


评论


@老鱼头

你说得对,ide代码第二行应该设定变量a为0,或者应该把使变量增加1放在另一个重复循环的下方。


点赞0


评论


Monica老莫Monica老莫

几何中的勾股定理?

点赞0


评论


主播喵副本主播喵副本

对吖

点赞0


评论


四九圣尊四九圣尊

666我终于懂了!

点赞0


评论


顺铂顺铂

我是java高手


点赞0


评论


取名字好难啊取名字好难啊

及时啊

点赞0


评论


幻_想幻_想

顶一顶

点赞0


评论


欠王迷欠王迷

666

点赞0


评论


junzhejunzhe

厉害了

点赞0


评论