|
36. 要求:利用递归思路将十进制数转二进制,编写自定义函数实现程序功能,完善划线处代码。
"""
函数名def getBin(n)
参数表:整数n表示待转化的十进制数
返回值:整数n对应的二进制数
"""
def getBin(n):
if n == ① :
return ""
else:
r = ②
return ③ + str(r)
print(getBin(18))

37. 要求:设计一个算法,给出9块硬币,其中有一块不合格,已知不合格的硬币比正常硬币轻,现用一天平,请利用它找出不合格的硬币,并且用天平的次数最少。请补全下列代码。
参考算法:我们容易想到用二分查找,将硬币分为2堆,“折半”比较,找出那个不合格的硬币。但这样还不够优化,我们可以随机等分成三份,拿出两组比较,划分的对称性更强,查找也更快。比如本题9块硬币,二分最坏的情况是3次查找,而三分最坏的结果是2次查找。本题算法只是针对了3^n的情况。
主要函数名:1.sp_coin(coin_list),2.coin_comp(coin_list)
参数表:1.coin_list--硬币序列,2.coin_list--硬币序列。
返回值:1.硬币序列分为三组,2.不合格硬币在原列表中的位置和查找次数。
示例:当输入硬币序列1 1 1 1 1 1 1 0 1时(硬币序列只能是3^n),返回:不合格硬币在原列表中的位置是 8 号硬币
查找次数是: 2 次
def comp(groA, groB):
if sum(groA) < sum(groB):
result = '左'
elif sum(groB) < sum(groA):
result = '右'
else:
result = '相等'
return result
def sp_coin(coin_list):
th = len(coin_list)
gro1 = coin_list[0:th//3]
gro2 = coin_list[ ① ]
gro3 = coin_list[th//3*2:th]
return gro1, gro2, gro3
def find_group(gro1, gro2, gro3):
res_land2 = ②
if res_land2 == '左':
f_Group = gro1
elif res_land2 == '右':
f_Group = gro2
elif res_land2 == '相等':
f_Group = gro3
return f_Group
def coin_comp(coin_list):
counter = 0
currList = coin_list
while len(currList) > 1:
gro1, gro2, gro3 = sp_coin(currList)
currList = find_group(gro1, gro2, gro3)
③
fake = ④
print('不合格硬币在原列表中的位置是',coin_list.index(fake)+1,'号硬币')
print('查找次数是:', counter,'次')
arr = input("请输入一个硬币序列(1代表真硬币,0代表假硬币):")
arr_list = [int(n) for n in arr.split()]
coin_comp(arr_list)

38. 设计一个算法,求1!+2!+3!+...+(n-1)!+n!。
根据上述计算规则,编写自定义函数完成程序功能,或补全代码。
函数名:jc(n)
参数表:n -- n为正整数。
返回值:阶乘值。
示例:当n=10时,返回:阶乘和结果是:4037913。
def jc(n):
if ①
return 1
else:
return ②
n = int(input("请您输入一个整数n:"))
sum = 0
for i in range(1,n+1):
sum = ③
print("阶乘和结果是:%d"% sum)
|
|