好未来笔试编程题[python实现]
借鉴一些牛友和自己的思想,整理了一下前5道题的python实现,没有测试过是否AC,所以不确定代码中有没有不通过的case,恳请大佬指正,轻喷谢谢~
1.一个数分成几份,可以被 3 整除的最大份数。比如 12345 分成12 3 45 结果为3.
思路:贪心算法
n = input() m = 0 # 计数 string = '' # 字符组合 c1,c2 = 0,0 # 余数分别为1和2的情况 for i in range(len(n)): if int(n[i]) % 3 == 0: m += 1 string = '' c1,c2=0,0 continue string += n[i] if int(n[i]) % 3 == 1: c1 += 1 else: c2 += 1 if (string != '' and int(string) % 3 == 0) or (c1>0 and c2>0): m += 1 string = '' c1,c2=0,0 print(m)
2.根据x + y = x|y,给定x, 求满足要求的第 k 个 y
不是很懂位运算,所以就简单粗暴的枚举了
t = int(input()) # 表示输入t组数据 l_in = [] for i in range(t): x,k = input().strip().split() # 每组数据的x和k a = [int(x),int(k)] l_in.append(a) # 所有组数据的列表 for ax in l_in: l_out = [] y = 1 while y > 0 and len(l_out) < ax[1]: 当l_out长度达到k时就停止 if ax[0] + y == ax[0] | y: l_out.append(y) y += 1 else: y += 1 print(l_out[-1]) # 打印出每组数据符合的第k个数据
3.给定数组[0-9] 和 boll_array[0111011110], 0表示可以输出,也可以不输出, 1必须输出对应位,输出所有可能情况(按字符串升序)
import copy # a = [0,1,2,3,4,5,6,7,8,9] # 数字数组 # b = [0,1,1,1,0,1,1,1,1,0] # 对应的布尔值数组 b = list(map(int,input().strip().split())) index = [] for i in range(0,len(b)): if b[i] == 1: b[i] = str(i) # 将布尔值为1的位置赋予对应的数值 if b[i] == 0: index.append(i) # 记录布尔值为0的位置索引 b[i] = '' # 同时赋予空 res = [b] for ind in index: for i in range(len(res)): c= copy.copy(res[i]) c[ind] = str(ind) # 对结果列表中的每个组合依次添加布尔值为0的位置所对应的数字 res.append(c) for i in range(len(res)): res[i] = ''.join(res[i]) res.sort() # 排序 for i in res: print(i)
4.n 面筛子,m面有奖,有奖继续掷筛子,没奖结束。输入给定每面分数的数组 s, len(s) = n, 求期望。
数学题, ave_score = sum(s)/n
e = (n-m)/n avg_score (第一次就没奖)+ m/n (avg_score + e) (第一次有奖,相当于从头开始)
化简得到 e = sum(s_array)/n-m
n,m = input().strip().split() sc = list(map(int,input().strip().split())) e = sum(sc)/(int(n) - int(m)) print('%.2f' % e)
5.最大上升子序列和
思路:动态规划
a = [5,1,3,4,9,7,6,8] a = list(map(int,input().strip().split())) n = len(a) d = [0 for i in range(n)] # 子序列最后一个元素值为a[i]时,对应的最大子序列和d[i] d[0] = a[0] for i in range(1,len(a)): s = [] for j in range(i): if a[i] > a[j]: # 找出子序列最后一个元素值小于当前元素的所有子序列 s.append(d[j]+a[i]) else: s.append(a[i]) d[i] = max(s) # print(d) print(max(d))#好未来##笔试题目##题解##秋招#