DAY05 -构造基本程序逻辑
2019.10.17-2019.10.25
1.水仙花数
水仙花数是指一个 它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)
for num in range (100,1000):
a=num//100 #求百位数
b=num//10%10 #求十位数
c=num%10 #求个位数
if a**3+b**3+c**3==num:
print(num,end=" ")
结果为:
153 370 371 407
2.完美数
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为"完全数"
for num in range (1,100):
count=0
for i in range (1,num):
if num%i==0:
count=count+i
i+=1
if num==count:
print(num,end=" ")
结果为:
6 28
3.五人分鱼
问题概述:A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。
日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,
也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿
走鱼。问他们合伙至少捕了多少条鱼?
五人分鱼python程序参考链接
[参考代码地址](https://blog.csdn.net/Moniicoo/article/details/81516538)
fish=1
while True: #表示无限循环,所以循环体中应当利用break语句跳出循环
num=fish;enough=True
for _ in range (5):
if (num-1)%5==0: #此时分鱼的情况必须是数量减一正好整除
num=(num-1)/5*4 #下一次分鱼时,鱼的数量
else:
enough=False
break
if enough:
print("他们合伙至少捕鱼的数量为{}".format(fish))
break
fish+=1
i=1
while i<6:
num=(fish-1)/5
print("第%d分别获得的鱼数量为%d"%(i,num))
fish=(fish-1)//5*4
i+=1
这道题一开始也是看不懂程序,后面理解到每次分的时候数量必须满足的条件,与分完鱼后,还剩下的数量.,猴子吃桃有相似之处
结果为
他们合伙至少捕鱼的数量为3121
第1分别获得的鱼数量为624
第2分别获得的鱼数量为499
第3分别获得的鱼数量为399
第4分别获得的鱼数量为319
第5分别获得的鱼数量为255
4.Fibonacci数列
Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。
————————————————
版权声明:本文为CSDN博主「柳亓」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lunar_queen/article/details/81811378
以下是我的做法,应该而言是非常简单的一种.
这里有个参考链接有五种方法.可以仔细阅读其他人的算法思想
斐波那契数列的五种python实现
a=0;b=1
i=1
print(a,b,end=" ")
while i<10:
c=a+b
print(c,end=" ")
a=b;b=c
i+=1
5.回文数
判断回文数的关键:将原来的数倒过来也和本身的数一样
所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,例如12321。判断给出的整数是否是回文数;若是,则输出该整数各位数字之和;否则输出该数不是一个回文数。
原理大致为:任何一个数除以10的余数就是该数最后一位;任何一个数除以10的商就是排除掉最后一位后的数;所以 ,一个数1234 就可以通过这种方法得到 123 和 4;接下来对 123 进行同样的操作,就得到 12 和 3;接下来得到 1 和 2;接着得到 0 和 1;整个过程是个循环,当商不是 0 的时候就一直如此;每次拿到一个余数,都用来构造新数,新数=新数*10+余数;所以经过四次循环后,我们得到新数 4321 ,如果是回文,那么新数应该等于原数,否则,说明不是回文。
————————————————
版权声明:本文为CSDN博主「小智解说」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42680327/article/details/81742609
num=int(input("请输入一个数字:"))
s=num ;y=0
while s>0:
y=y*10+s%10
s=s//10
if y==num:
print("是回文数")
else:
print("不是回文数")
结果为:
请输入一个数字:1221
是回文数
还有另一种切片字符串的方法可以
#回文素数
def prime(num): #判断是否为素数
list=[]
for i in range (2,num):
for j in range (2,i//2): #在python3中得用整除,否则会在后面加一个小数
if i%j==0:
break
else:
list.append(i)
return list
def palindrome (num):
num=str(num) #转换成字符串类型然后进行切片
m=num[ : :-1] #这个部分非常的巧妙就利用切片的方法非常巧妙的反向输出列表元素
if num==m:
return True
else:
return False
if __name__== '__main__' :
num=int(input("请输入一个数:"))
if prime(num) and palindrome(num):
print("这是回文素数!")
else:
print("这个不是回文素数")
6.craps 赌博游戏
craps 赌博 游戏
规则:玩家掷两个骰子,每个骰子点数为1-6,如果第一次点数和为7或11,则玩家胜;如果点数和为2、3或12,则玩家输庄家胜。
若和为其他点数,则记录第一次的点数和,玩家继续掷骰子,直至点数和等于第一次掷出的点数和则玩家胜;若掷出的点数和为7则庄家胜。
import random #引入随机函数模块
num1=random.randint(1,6)
num2=random.randint(1,6)
num=num1+num2
print("整出的数字为:{}".format(num))
if num==7 or num==11:
print("玩家胜!")
elif num==2 or num==3 or num==12:
print("庄家胜!")
else:
while True:
num3=random.randint(1,6)
num4=random.randint(1,6)
num5=num3+num4
print("再一次丢出的数字和为%d"%num5)
if num5==num:
print("玩家胜!")
break
if num5==7:
print("庄家胜!")
break
整出的数字为:5
再一次丢出的数字和为3
再一次丢出的数字和为8
再一次丢出的数字和为4
再一次丢出的数字和为10
再一次丢出的数字和为6
再一次丢出的数字和为8
再一次丢出的数字和为6
再一次丢出的数字和为12
再一次丢出的数字和为7
庄家胜!