企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 编程题一 在编写抽奖程序时,为了保证一个人只有一次中奖机会,要检查新抽出来的数字是不是已经被抽中过了。 一种办法是将已经中过奖的人员编号存放在test_list里面,然后每抽出一个新的人员编号,判断它是否在中奖人员列表中。 如果没有在中奖人员列表中,说明中奖号码有效,并将它保存进中奖人员列表;如果已经在里面了,就再生成一个新的人员编号。 请你补全下面的代码,实现判断一个数字是否在列表中的功能。 #子问题算法(子问题规模为1) def is_in_list(init_list,num):    if init_list[0] == num:        return True    else:        return False #分治法 def find_out(init_list,num):    n = len(init_list)    if ____①______          #如果问题的规模等于1,直接解决        return is_in_list(init_list,num)    #分解(子问题规模为n/2)    left_list,right_list = _________②____________    #递归,分治,合并    res=find_out(left_list,num) __③__ find_out(right_list,num)    return res if __name__ == "__main__":    #测试数据    test_list = [18,43,21,3,28,2,46,25,32,40,14,36]    #查找    print(_____④_____)  程序运行结果: \>>>True **试题编号:20210120-cqf-01** **试题类型:编程题** **标准答案:** **参考答案:** (1) n==1:   或其他正确答案; (2分) (2) init_list[:n//2],init_list[n//2:]    或其他正确答案; (2分) (3) or    或其他正确答案; (2分) (4) find_out(test_list,25)    或其他正确答案。 (2分) **试题难度:较难** **试题解析:** **参考程序:** #子问题算法(子问题规模为1) def is_in_list(init_list,num):    if init_list[0] == num:        return True    else:        return False #分治法 def find_out(init_list,num):    n = len(init_list)    if n == 1:          #如果问题的规模等于1,直接解决        return is_in_list(init_list,num)    #分解(子问题规模为n/2)    left_list,right_list = init_list[:n//2],init_list[n//2:]    #递归(树),分治,合并    res=find_out(left_list,num) or find_out(right_list,num)    return res if __name__ == "__main__":    #测试数据    test_list = [18,43,21,3,28,2,46,25,32,40,14,36]    #查找    print(find_out(test_list,25)) #True ***** # 编程题二 乘法运算等于多个加法运算的和。比如,3×2可以理解为3+3,也可以理解为2+2+2 。 下面的程序使用递归算法演示了计算两个自然数的乘积的过程。请你补全代码。 输入:分两次输入自然数num1,num2 输出:num1 × num2 = 乘积 def cheng_fa(num1,num2,value):     if          ①                      value += 0     else:         value += num1                  ②                  value = cheng_fa(num1,num2,value)     return      ③         num1=int(input('输入第1个数:')) num2=int(input('输入第2个数:')) value=0 value = cheng_fa(num1,num2,value) print('{} X {} = {}'.format(num1,num2,value)) 程序运行结果: 输入第1个数:3 输入第2个数:7 3 X 7 = 21 **试题编号:20210123-cqf-14** **试题类型:编程题** **标准答案:** **参考答案:** (1)num1==0 or num2==0:  或其他等效答案 ;(3分) (2)num2 -= 1 或 num2=num2 - 1 或其他等效答案; (4分) (3)value 。(3分) **试题难度:一般** **试题解析:** **参考答案:** (1)num1==0 or num2==0:  或其他等效答案 (3分) (2)num2 -= 1 或 num2=num2 - 1 或其他等效答案 (4分) (3)value (3分) **参考程序:** def cheng_fa(num1,num2,value):     if num1==0 or num2==0:         value += 0     else:         value += num1         num2 -= 1         value = cheng_fa(num1,num2,value)     return value num1=int(input('输入第1个数:')) num2=int(input('输入第2个数:')) value=0 value = cheng_fa(num1,num2,value) print('{} X {} = {}'.format(num1,num2,value)) 程序运行结果: 输入第1个数:3 输入第2个数:7 3 X 7 = 21 ***** # 编程题三 外卖送餐服务越来越受到人们的喜爱,外卖小哥们也成了路上的一道风景。 当顾客使用外卖软件点餐时,会出现一个预计送达时间,包括了餐厅制作食物的时间,路上的骑行时间等等。 一种常用的计算路上骑行时间的方法是用曼哈顿距离(manhatton distance)除以平均骑行速度。平面上点A(x1,y1)与点B(x2,y2)的曼哈顿距离为:|x1-x2|+|y1-y2|。 假设一名外卖小哥的平均骑行速度为30km/h。下面的程序模拟计算外卖小哥的路上骑行时间,请你补充完整。 输入:分两次输入A点和B点的坐标值 输出:A、B两点间的曼哈顿距离和路上骑行时间。 #求绝对值 def my_abs(n):   if       ①              return n   else:       return      ②      #主程序 v=30 #平均骑行速度 x1=float(input('输入A点的x坐标(米):')) y1=float(input('输入A点的y坐标(米):')) x2=float(input('输入B点的x坐标(米):')) y2=float(input('输入B点的y坐标(米):')) #计算曼哈顿距离mht mht =            ③                    #计算路上骑行时间 time_on_the_road    =            ④                    print('A、B两点的曼哈顿距离为{}米'.format(mht)) print('预计路上骑行时间需要{}分钟'.format(time_on_the_road)) 程序运行结果: 输入A点的坐标(米),以逗号分隔:-1000,1000 输入B点的坐标(米),以逗号分隔:1000,-1000 A、B两点的曼哈顿距离为4000米 预计路上骑行时间需要8.0分钟 **试题编号:20210123-cqf-15** **试题类型:编程题** **标准答案:** **参考答案:** (1) n>0: 或 n>=0:   (2分) (2) -n  (2分) (3)my_abs(x1-x2)+my_abs(y1-y2) 或 sum([my_abs(x1-x2),my_abs(y1-y2)]) 或 sum((my_abs(x1-x2),my_abs(y1-y2))) 或其他等效答案;  (4分) (4)mht/1000/v*60 或 mht/(1000*v)*60 或 mht*60/1000/v 或 (mht*60)/(1000*v)或其他等效答案  。(4分) **试题难度:一般** **试题解析:** **参考程序:** #求绝对值 def my_abs(n):   if n>0:       return n   else:       return -n #主程序 v=30    #平均骑行速度 x1,y1=eval(input('输入A点的坐标(米),以逗号分隔:')) x2,y2=eval(input('输入B点的坐标(米),以逗号分隔:')) #计算曼哈顿距离mht mht = my_abs(x1-x2)+my_abs(y1-y2)               #方法1 mht = my_abs(y1-y2)+my_abs(x1-x2)               #方法2 mht = sum([my_abs(x1-x2),my_abs(y1-y2)])        #方法3 mht = sum((my_abs(x1-x2),my_abs(y1-y2)))        #方法4 #计算路上骑行时间 time_on_the_road = mht/1000/v*60        #方法1 time_on_the_road = mht/(1000*v)*60      #方法2 time_on_the_road = mht*60/1000/v        #方法3 time_on_the_road = (mht*60)/(1000*v)    #方法4 print('A、B两点的曼哈顿距离为{}米'.format(mht)) print('预计路上骑行时间需要{}分钟'.format(time_on_the_road))