python刷题—转换编程思想到python!
来源:互联网 发布:可以看腐剧的软件 编辑:程序博客网 时间:2024/06/14 02:55
1、0~9这10个数字可以组成多少不重复的3位数?(三个数都不一样)
#-*-coding:utf-8-*-num = 0for i in range(100,1000): if str(i)[0] != str(i)[1] and str(i)[0] != str(i)[2] and str(i)[1] != str(i)[2]: num += 1print("可以组成",num,"个不重复的数字")
2、水仙花数(自幂数)
水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如:1^3+5^3+3^3=153。求100~999之间所有的水仙花数。
#-*-coding:utf-8-*-list_num = []for i in range(100, 1000): i_1 = i % 10 i_2 = i % 100 / 10 i_3 = i / 100 if i == i_1 ** 3 + i_2 ** 3 + i_3 ** 3: list_num.append(i) else: passprint("100-1000所有的水仙花数为", list_num)
3、完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如,第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。编程求10000以内的完全数。
(上方注释部分我自己实现,下方我pythonic版的实现,学习思路和python思想!)
#-*-coding:utf-8-*-'''import numpy as npperfect_list = []for i in range(1,10001): list_i = [1] sum_i = 0 for j in range(2,int(np.sqrt(i)) + 1): for k in range(j,i + 1): if j * k == i: list_i.append(j) list_i.append(k) else: pass for value in list_i: sum_i += value if sum_i == i: perfect_list.append(i) else: passprint("10000以内完全数有:", perfect_list)'''list_num = []num = 10000for i in range(1,num + 1): if (sum([j for j in range(1,i) if i % j == 0])) == i: list_num.append(i)print("10000以内完全数有", list_num)4、相亲数
220的真因数之和为1+2+4+5+10+11+20+22+44+55+110=284284的真因数之和为1+2+4+71+142=220毕达哥拉斯把这样的数对A、B称为相亲数:A的真因数之和为B,而B的真因数之和为A。求100000以内的相亲数。
#-*-coding:utf-8-*-date_list = []num = 10000for i in range(1,num): dict_date = {} data2 = sum([j for j in range(1,i) if i % j == 0]) if i == sum([k for k in range(1, data2) if data2 % k == 0]): dict_date[i] = data2 #剔除掉结果中键和值相等的字典对和两个字典变量中键和值互为相等中的一个({220: 284}, {284: 220}) if i < data2: date_list.append(dict_date) else: pass else: passprint("between 1 to 10000's date number are: ", date_list)
5、黑洞数
黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相同的整数,经限“重排求差”操作,总会得到某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。举个例子,3位数的黑洞数为495.简易推导过程:随便找个数,如297,3个位上的数从小到大和从大到小各排一次,为972和279,相减得693。按上面做法再做一次,得到594,再做一次,得到495,之后反复都得到495。验证4位数的黑洞数为6174。
我的代码:import randomfrom itertools import permutationsbite_num = 5flag = str(random.randint(10000,99999))list_num = []for i in range(bite_num): list_num.append(flag.strip()[i])permu_list = list(permutations(list_num, bite_num))for i, index in enumerate(permu_list,0): temp = "".join(index) permu_list[i] = int(temp)result = str(max(permu_list) - min(permu_list))while flag != result: flag = result list_num = [] for i in range(bite_num): list_num.append(flag.strip()[i]) permu_list = list(permutations(list_num, bite_num)) for i, index in enumerate(permu_list,0): temp = "".join(index) permu_list[i] = int(temp) result = str(max(permu_list) - min(permu_list))print("四位数的黑洞数为:", result)更pythonic的代码:import randomdef func(n): a = [int(i) for i in str(n)] a.sort() s1 = reduce(lambda x, y : 10 * x + y, a[::-1]) s2 = reduce(lambda x, y : 10 * x + y, a) return n if s1 - s2 == n else func(s1 - s2)n = str(random.randint(1000,10000))print("res:", func(n))
阅读全文
0 0
- python刷题—转换编程思想到python!
- Python 编程思想 —— 可迭代对象(iterables)
- Python中的编程思想(1)
- python面向对象的编程思想0725
- python面向对象编程的思想0727
- python学习——《python编程从入门到实践》
- 装饰器思想 由python联想到javascript
- python:ip地址转换到数字
- PYthon 转换HTML到Text纯文本
- 罗马到数字的转换程序 python
- python中json到dict转换
- ROS python 代码转换到 C++
- python 2 代码转换到Python 3的方法
- python:面向过程和面向对象编程思想
- python编程_时间日期字符串转换
- [python&php 网络编程]字节序转换
- Python网络编程_str<-->bytes转换
- python编程 强制转换编码utf-8
- 文本框绑定enter事件后,除了执行绑定文本框方法外,页面再刷新一次
- python基础1
- Gobblin Rest Api
- js实现弹窗
- opencv3.0 无法使用FeatureDetector.SURF
- python刷题—转换编程思想到python!
- Java中堆和栈的基本概念
- docker容器和镜像区别
- 解决Error:(16, 0) Minimum supported Gradle version is 4.1. Current version is 2.14.1
- 调整数组使奇数全部都位于偶数前面
- transition(过渡)
- html input输入限制小于100的正整数
- angular4启动报错信息InvalidConfigError: Parsing angular-cli.json failed. Ensure the file is valid JSON
- 控制可调白光 LED,实现以人为本的照明---凯利讯半导体