万万没想到研二下学期要为当程序员做准备——在线编程笔试题篇
1 ''' 2 Created on 2016年4月1日 3 4 @author: betterSN 5 6 蘑菇街2016实习生招聘大数据工程师笔试题:给定9个数字,分别代表书写1-9的每个数字需要用的墨水量,并且给出总墨水量,请求出能书写出的最大数字为多少 7 即 输入:总墨水两vol 8 书写1-9分别用的墨水两(a1,a2,...,a9) 9 输出:得到的最大数字 10 例如:输入vol=5, (a1,a2,...,a9) = (5,4,3,2,1,2,3,4,5) 输出 55555 11 输入vol=5, (a1,a2,...,a9) = (5,4,3,2,2,2,3,4,5) 输出 76 12 ''' 13 from _functools import reduce 14 15 ''' 16 输入(a1,a2,...,a9)得到按照墨水量排序的(a,v)的组合形成的list 17 ''' 18 def voldata_sorted(n,input): 19 dict = {} 20 21 for i in range(n): 22 dict[i+1] = input[i] 23 dict_sort = sorted(dict.items(),key = lambda d: d[1]) 24 print("dict_sort:") 25 print(dict_sort) 26 return dict_sort 27 ''' 28 输入list,每个元素是整数,得到由大到小的排序 29 ''' 30 def buildmax(input): 31 input_sort = sorted(input, reverse = True) 32 return input_sort 33 34 ''' 35 得到最终答案的备选,即墨水量的总和为vol,并且局部最大 36 例如(a1,a2,...,a9) = (5,4,3,2,1,2,3,4,5)的情况下 37 [[5, 5, 5, 5, 5], [4, 4, 5], [6, 6, 5], [3, 6], [7, 6], [2, 5], [8, 5], [1], [9]] 38 ''' 39 def getcandidatelovenumber(vol,n,input): 40 data_list = voldata_sorted(n, input) 41 #print("data_list:") 42 #print(data_list) 43 candidates = [] 44 i = 0 45 for (k,v) in data_list: 46 can = [] 47 vol_re = vol 48 while(vol_re>0): 49 key = findkey(vol_re, data_list[0:i+1]) 50 #print(vol,key) 51 if key > 0: 52 can.append(key) 53 else: 54 break 55 vol_re = vol_re-v 56 candidates.append(can) 57 i = i+1 58 print(candidates) 59 return candidates 60 61 ''' 62 找出data_list中最靠近max的最大的k,data_list中每个元素的形式为(k,v) 63 ''' 64 def findkey(max, data_list): 65 result = -1 66 for (k,v) in data_list: 67 if v<=max: 68 result = k 69 return result 70 71 72 def f1(x,y): 73 return x*10 + y 74 75 def getlovenumber(n,data): 76 l = list(map(buildmax,getcandidatelovenumber(n,9,data))) # 得到每个备选的最大数字排序 77 candidata_numbers = [] 78 # 将排序的list转化为数字 79 for item in l: 80 num = reduce(f1,item) 81 candidata_numbers.append(num) 82 # 找出备选中最大的数字 83 return max(candidata_numbers) 84 85 def main(): 86 vol = input("请输入墨水总量\n") 87 str = input("请输入a1-a9,用空格隔开\n").split() 88 data = [] 89 for item in str: 90 data.append(int(item)) 91 getlovenumber(vol, data) 92 93 if __name__ == '__main__': 94 print(getlovenumber(5, [5,4,3,2,2,2,3,4,5])) 95 96 97
背景是这样的,留给自己看:
由于今年工作不好找,大家都走上了人人都当程序员的道路。(本来不是人人都是产品经理嘛?? p.s. 这是2016年春)
本人可以说对编程从来没有系统学过,都是写论文做实验的时候需要用什么就现学的那种,只在本科上课的课堂上了解过编程的基本思想
以前只写过java,把编程当作是一种辅助研究的工具看待,但也不能否认用代码解决问题时还是有一定成就感滴。
目前打算向数据挖掘(甚至大数据)方向发展,对,是职业发展,故把一切抛开重新来过,几乎零基础学起
这次是开始学习python的时候发现python的确比Java方便,所以打算把人生第一次的技术岗笔试用python写一下。
(真相是:作为一个怎么看都不是程序员的我,笔试的时候当然连选择题的题目都看不懂!!!so, just keop moving!)