python_五级_中国电子学会_2021年_真题_汉诺塔
汉诺塔是一道非常经典的题,12月5日悦儿姐在考python五级时又遇见它了,在这里给大家分享一下。
题目:设计一个算法,汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘,大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。有三个单字符串和一个整数。三个字符表示三个杆子的编号,整数为盘子的数目。
根据上述计算规则,补全下列代码。
函数名:hannota(n,a,b,c)
参数表:n--正整数表示盘子数,a--a杆子,b--b杆子,c--c杆子。
返回值:移动路径。
示例:n=3,返回:A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
代码:
def hannota(n,a,b,c):
if n==1:
print(a,'-->',c)
return None
if n==2:
print(a,'-->',b)
print(①)
print(b,'-->',c)
return None
hannota(②)
print(a,'-->',c)
hannota(③)
a='A'
b='B'
c='C'
n=int(input('请输入黄金圆盘数量n:'))
hannota(n,a,b,c)
好啦,题目说完了,我们来讲怎么填这些东东。真的是,填空题真的是嗷嗷烦人,还不如我这位原创选手自己写呢!总是要我们理解别人的意思,真的好难。
该抱怨的抱怨完了,我们来回归正题......这类填空题主要要做到几点:1.审题 2.想自己的思路 3.读别人的思路 4.填空
这道题和我们之前的数麦子那题特别像,每后一步移动的步数也是前一步的两倍,不信的话可以去4399小游戏里玩一玩、感受感受。总结如下规律:要移动的那片圆盘对应的那根柱子上的圆盘数如果是奇数,那么圆盘直接移动到终点(c柱子)。如果是偶数,那就先放在空的那根柱子上,再按照奇数的方法做,最后把那片圆片移过去。
so...understand?不懂看程序,看着看着就会懂的:
def hannota(n,a,b,c): # 定义函数,参数代表的是什么在前面的参数表中看
if n==1: # 只剩一步
print(a,'-->',c)
return None
if n==2: # 还剩两步
print(a,'-->',b) # 先借助b柱子
print(a,'-->',c) # 再到终点
print(b,'-->',c) # 把b柱上快被忘掉的东东拿回来
return None
hannota(n-1,a,c,b) # 把a柱上的借助c柱放在b柱上
print(a,'-->',c) # a上的移过去了
hannota(n-1,b,a,c) # 把b柱上的移到c柱上
a='A'
b='B'
c='C'
n=int(input('请输入黄金圆盘数量n:'))
hannota(n,a,b,c)
好啦,有什么缺点放在评论区,我在这里,等你哦!
————————————————
原文链接:https://blog.csdn.net/weixin_46710559/article/details/121750024
https://blog.51cto.com/myunix/2399892
python_五级_中国电子学会_真题_计算天数
话不多说我们直接单刀直入进入题目:
输入年月日,计算这一天是这一年的第几天,编写自定义函数完成程序功能,完善程序代码。——根据年月日,计算这一天是这一年的第几天。函数名 def getDays(year)。 参数 year:表示日期,字符串类型如:20211201。 返回值 整数,表示这一天是这一年的第几天。
代码:
def getDays(year):
s=0
y=int(year[:4])
m=int(year[4:6])
d=int(year[6:8])
mothdays=(31,28,31,30,31,30,31,31,30,31,30,31)
for i in range(①):
s=s+②
if (y%4==0 and y%100!=0 or y%400==0) and ③:
s=s+1
s=s+d
return s
year='20211201'
theday=④
print(theday)
好,开始讲解。整个程序写的还是不错的,只不过有些地方有点让悦儿姐匪夷所思。比如③.....还记得我们填空题的步骤吗?1.审题 2.想自己的思路 3.读别人的思路 4.填空
这段代码很好读,我们直接填空去。
def getDays(year): # 定义函数
s=0 # 你们要学好英语啊,s就是sum的简称,sum你别告诉我你不知道,就是和。
y=int(year[:4]) # y m z
m=int(year[4:6]) # 2021|12|01
d=int(year[6:8])
monthdays=(31,28,31,30,31,30,31,31,30,31,30,31) # 月份列表
for i in range(m-1): # 求月(最后一个月份不要加,因为没有完全过完)
s=s+monthdays[i]
if (y%4==0 and y%100!=0 or y%400==0) and True: # 求年是否是闰年。四年一闰,百年不闰,四百年再闰。前一个空好像都包括了,后一个小女就瞎填了,如有更好的想法,欢迎来找我。
s=s+1
s=s+d # 求日
return s
year='20211201'
theday=getDays(year)
print(theday)
Good bey