python输出1000以内回文数_Python进阶记录之基础篇(五)

回顾

在Python进阶记录之基础篇(四)中,我们介绍了Python中循环结构的相关知识,需要重点掌握for-in循环和while循环的用法,能够结合分支结构和循环结构实现一些简单的需求。今天我们根据前几次的内容来讲解几个经典问题,回顾知识点的同时加深印象,算是对之前学到的内容的一个总结和巩固。

水仙花数

水仙花数也称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数。水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。例如153(1³+5³+3³=153)就是一个水仙花数。

下面我们通过Python代码找出所有的水仙花数。思路如下:

1、因为水仙花数是一个三位数,所以我们通过for-in循环遍历所有三位数(100~999),range(100, 1000)可以表示所有三位数。

2、对于一个三位数,我们需要将它的个位数、十位数、百位数分别拆分,利用取整和求余两个运算符可以巧妙地将其拆分。

3、对得到的三个数进行立方和的运算,如果结果为这个三位数本身,则是水仙花数,反之,则不是。

python输出1000以内回文数_Python进阶记录之基础篇(五)_第1张图片

求水仙花数

完全数

完全数又称完美数或完备数,是一些特殊的自然数。完全数所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。例如,6就是一个完全数,它的约数包括1、2、3、6,除去它本身6外,其余3个数1、2、3相加1+2+3=6。

由于找尽完全数几乎是件不可能的事,这里我们就求1000以内的完全数。下面我们通过Python代码找出1000以内的所有完全数。思路如下:

1、通过for-in循环遍历2~999的整数(0没有约数,而1的约数只有它本身),通过range(2, 1000)进行遍历。

2、对于一个整数n,我们可以使用枚举法获取它的所有约数,由于完全数要求约数除去本身,我们只遍历1~n-1,然后用求余法判断是否为约数。

3、若为该整数n的约数,则进行相加操作,若最后约数相加和等于n,则n为完全数。

python输出1000以内回文数_Python进阶记录之基础篇(五)_第2张图片

求1000以内的完全数

百鸡百钱问题

百鸡百钱问题是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?意思就是一只公鸡5钱,一只母鸡3钱,三只小鸡1钱,若100钱买了100只鸡,则公鸡、母鸡、小鸡各买几只?

下面我们通过Python代码来解决这一问题。思路如下:

1、由于公鸡一只5钱,所以公鸡数量需要小于等于20;母鸡一只3钱,母鸡数量最多只能33只;小鸡三只1钱,小鸡数量必须是3的整数倍。

2、我们假设公鸡数量为a,母鸡数量为b,由于总数是100,所以小鸡数量为100-a-b。

3、利用嵌套循环,遍历公鸡与母鸡的可能数量,然后判断小鸡数量是否满足是3的整数倍,并且三种鸡总钱数等于100即为满足条件的一组解。

python输出1000以内回文数_Python进阶记录之基础篇(五)_第3张图片

百鸡百钱问题

总结

以上内容介绍了3个比较经典的问题以及基本的Python代码实现,代码在算法上还存在很多优化的地方,后续内容我们再讨论。这三个问题对于之前讲到的运算符、分支结构、循环结构的回顾与巩固很有帮助,所谓温故知新,多练习对于掌握知识点是很重要的。感谢大家的支持与关注,欢迎一起学习与交流~

你可能感兴趣的:(python输出1000以内回文数_Python进阶记录之基础篇(五))