这两天在学python和算法,感觉还挺有趣的,现在试着写点代码练练手
- 问题描述:一块长方形能被切割成完全一样的正方形的边长是多少
也就是说,比如一块长6宽2的长方形可以分割成三个边长为2的正方形,所以求得正方形的边长是2.- 解题原理:一块长方形要等分为若干个正方形,那这个长方形的长边和短边一定都分别是这个正方形边长的整数倍(整数个正方形拼成长方形),我们要求得是被长边和短边除了得出来是整数的数(提出一个问题:长方形长宽都是整数的情况下正方形边长这个数可不可能不是整数?),那这个问题就转化为求最大公约数问题了。为此我们可以采用欧几里得算法(辗转相除法)来解决问题。
- 欧几里得算法描述:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。
解题思路:
根据欧几里得算法,我们求边长可分为三步:
- 求两数相除的余数
- 若余数为0,则较小那个是所要求的边长
- 若不为0,则余数与较小边按大小分别作为新的除数与被除数,返回第一步
我们可以用递归来解决此问题:
- 基线条件:余数为0
- 递归:取余
用Python解决问题:
def