【每周一坑】求乘积最大
明天就是五一小长假了,又到了换个地方领略祖国大好河山上的人民的时候了,祝大家长假愉快。
在放假之前,利用一点儿闲暇时间,看看本周的题目吧。
设定一个长度为 N 的数字串,将其分为两部分,找出一个切分位置,使两部分的乘积值最大,并返回最大值。
示例:
def product(num): ''' >>>product(312) 62 >>>product(1234) 492 >>>product(12345) 6170 >>>product_2(123456) 74070 '''
附加题:
输入的数字串可以重新打乱排列,比如输入 123 ,打乱排列之后会有 132,213,231,312,321 等情况,其他条件不变,求最大值。
def product_2(num): ''' >>>product_2(1234) 1312 >>>product_2(12345) 22412 >>>product_2(123456) 342002 '''
题目介绍完毕。
【程序员的浪漫】解答
上周的题目主要考察 python 中两大加密模块的知识,由于 hashlib.md5 无法简单的破解,所以给出了 4 个选项,按照先 md5 加密,然后 base64 加密的顺序逐个遍历选项便可以得到正确答案。
代码:
import base64import hashlib choices = [
'多喝热水',
'我们在一起吧',
'我选择原谅你',
'别说话,吻我' ]
encrypted_string = 'NDRiMWZmMmVjZTk5MTFjMWI1MDNkYTY0MzZlYTAzMTA=\n'
def decrypt(choices,string): for i in choices: md5 = hashlib.md5() md5.update(i.encode('utf-8')) md5_s = md5.hexdigest() base64_s = base64.encodestring(md5_s.encode('utf-8')) if base64_s == string.encode('utf-8'): return i print(decrypt(choices,encrypted_string))
上期有很多同学都答对了,答案是 "多喝热水" 。恭喜以下同学:
YUAN,王任,GS,大魔王Fisher,痴梦。
另外,代码也可以参考:
@王任:http://paste.ubuntu.com/24426729/
@无名同学:https://gist.github.com/FingerRec/e97704192eeab1945807c78f299ef51e