每种高级语言几乎都会和数学打上交道,比如初期的实现1-100的素数,考研学者的数学和思维逻辑能力,到计算九皇宫的算法实现,这篇就写几个关于数学的python实现
# 斐波那契数列
sum = 0
num = 1
i = 0
while i < 10:
nth = sum + num
print(nth, end=" , ")
# 更新值
sum = num
num = nth
i+= 1
结果:
1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89
斐波那契数列意思第一个数加上第二个数=第三个数,以此类推
# 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5^3 + 3^3 = 153。
# 1000以内的阿姆斯特朗数: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。
sum = int(input("输入一个数"))
sumlen = len(str(sum))
sumNum = 0
for i in str(sum):
sumNum +=int(i) ** sumlen
if sum == sumNum:
print("这个数的阿姆斯特郎数")
else:
print("不是阿姆斯特郎数")
sums = int(input("请输入要查找到多少的阿姆斯特郎数"))
sum = 0
while True:
num = 0
n = len(str(sum))
for i in str(sum):
num += int(i)**n
if sum == num:
print("%d\t这是个阿姆斯特朗数"%sum)
if sum >sums:
break
sum +=1
from itertools import product
for x,y,z,c in product(['a','b','c'],['d','e','f'],['m','n','a'],[2,3,1,4]):
print(x,y,z,c)
意思为算出给定列表中全部可能的位数组合,这个答案的百度百科的,如果使用java编写笛卡尔积需要30-50行代码,python已经封装好了produch函数,使用for循环便可便利全部的笛卡尔积数
小编是在图书馆看到一本书上写的卡普雷卡数,当时觉得好玩,就拍了下来,星期一就想用python试一下实现
卡普尔卡数就是24502500一个位数为偶数的罗马数对半分开,(2450+2500)^ 2 == 24502500,下面是小编百度找到的解释:
传说数学家 卡普雷卡 (Kaprekar)偶然发现铁路旁的里程碑“3025”被雷击得一分为二:30与25.他敏锐地注意到:30+25=55,55^2=3025。
现称这样具有分段和平特性的整数为卡普雷卡数。
先探讨搜索4位卡普雷卡数的基础上引申至一般偶数位卡普雷卡数,并进一步拓广到2段和平方数。
下面是一个简单的找四位数中卡普雷卡数函数:
def Kaprekar1():
for i in range(1000, 10000):
a = int(str(i)[:2])
b = int(str(i)[2:])
c = (a + b) ** 2
if i == c:
print("(%d + %d) ** 2 == %d;" % (a, b, c))
Kaprekar1()
结果:
(20 + 25) ** 2 == 2025;
(30 + 25) ** 2 == 3025;
(98 + 1) ** 2 == 9801;
得到给定位数的卡普雷卡数:
def Kaprekar2(len):
if len % 2 == 0:
len1 = 10 ** (len - 1)
len2 = 10 ** len
for i in range(len1, len2):
lens = int(len / 2)
a = int(str(i)[:lens])
b = int(str(i)[lens:])
c = (a + b) ** 2
if i == c:
print("(%d + %d) ** 2 == %d;" % (a, b, c))
else:
print("请输入偶数:")
Kaprekar2(2)
结果:
(2450 + 2500) ** 2 == 24502500;
(2550 + 2500) ** 2 == 25502500;
(5288 + 1984) ** 2 == 52881984;
(6048 + 1729) ** 2 == 60481729;
(9998 + 1) ** 2 == 99980001;#000省略了
那么除了偶数外还有奇数分段,如 88209 = (88+209)^ 2,如果这个数为5位,第一位2个,第二位3个
def Kaprekar3(len):
len1 = 10 ** (len - 1)
len2 = 10 ** len
for i in range(len1, len2):
lens = int(len // 2)
a = int(str(i)[:lens])
b = int(str(i)[lens:])
c = (a + b) ** 2
if i == c:
print("(%d + %d) ** 2 == %d;" % (a, b, c))
Kaprekar3(7)
结果:
(494 + 1729) ** 2 == 4941729;
(744 + 1984) ** 2 == 7441984;
这个是中国古代的一个经典的数学题,就是说,有一百铜币,买一百只鸡,其中公鸡5铜币一只,母鸡3铜币一只,小鸡一铜币三只,
要求每种鸡必须购买一只,求出一共有几种买法
答案如下:大家不如先自己做一下再看答案呢
x = 1
y = 1
for i in range(1,21):
for j in range(1,34):
z = 100 - (x+y)
if (z %3 == 0) and (x * 5 + y *3 +z/3 ==100):
print('%s公鸡 , %s母鸡 , %s小鸡 '%(x,y,z))
y +=1
y =1
x+=1
# 猴子有一天摘了很多桃子,第一天吃了一半觉得不够就又多吃了一个,第二天也是,一直到第十天,发现就剩一个了
问猴子第一天摘了多少桃子
x2 = 1
for i in range(9):
x1 = (x2 + 1) * 2
x2 = x1
print x2
people = {}
for x in range(1, 31):
people[x] = 1
print(people)
check = 0
i = 1
j = 0
while i <= 31:
if i == 31:
i = 1
elif j == 15:
break
else:
if people[i] == 0:
i += 1
continue
else:
check += 1
if check == 9:
people[i] = 0
check = 0
print("{}号下船了".format(i))
j += 1
else:
i += 1
continue