百度2016笔试(算法春招实习)

4.23 10:00更新。编程题1的Python实现。仅供參考。源代码见页尾

4.23 20:35更新,编程题2的Python实现。源代码见尾页

百度的题还是很偏重算法的。总体来讲难度比較高。尤其是编程题,以下附上原题:

选择题

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

问答题

主观题

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

编程题

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

编程题1源代码

#coding:utf-8

data = []

# 处理输入
while True:
    item = []
    theString = ''
    theString = raw_input() # theString = '(??)'
    if len(theString) == 0:
        break
    else:
        item.append(theString)
        for i in range(theString.count('?')):
            aibi = raw_input() # '1 2'
            ai = int(aibi.split(' ')[0])
            bi = int(aibi.split(' ')[1])
            aibi = []
            aibi.append(ai); aibi.append(bi) # aibi = [1,2]
            item.append(aibi) # item = [['(?

?)'], [1,2], [2,8]]
    data.append(item) #data = [  ['(?

?)', [1,2], [2,8]], ......  ]

# 生成全部括号的可能性
def allThePosibility(theString,data):
    # 对于该问号有改成)和(这两种可能
    if theString.count('?

') == 0:
        data.append(theString)
    else:
        theStringToLeft = ''
        theStringToRight = ''
        theIndex = theString.index('?') # 第一个问号的位置
        theStringToLeft = theString[:theIndex] + '(' + theString[theIndex+1:]
        #print theStringToLeft
        theStringToRight = theString[:theIndex] + ')' + theString[theIndex + 1:]
        #print theStringToRight
        allThePosibility(theStringToLeft,data)
        allThePosibility(theStringToRight,data)
        return data # ['((()', '(())', '()()', '()))']

# 是否正则化
def isRegularization(theString): # theString = '((()'
    if theString.count('(') != theString.count(')'):
        return 0
    stack = []  # 设置一个栈
    for alphabet in theString:
        if alphabet == ')' and stack == []:
            return 0
        else:
            if alphabet == '(':
                stack.append(0) # 入栈
            else: # 遇到右括号
                stack.pop() # 出栈
    if stack != []:
        return 0
    else:
        return theString

# 每一个问号的位置
def positionOfQuestionMark(theString): # theString = '(?

?

)'
    i = 0
    position = []
    while True:
        if '?

' in theString[i:]:
            theIndex = theString[i:].index('?

') # 更新下一个问号的位置
            i += theIndex
            position.append(i)
            i += 1
        else:
            break
    return position # [1,2]

# 处理数据
for item in data: # item = ['(??)', [1,2], [2,8]]

    regularzations = []

    # 全部括号的位置
    position = positionOfQuestionMark(item[0]) # position = [1,2]
    # 列出全部能加括号的情况
    posibilities = allThePosibility(item[0], data=[]) # posibilities = ['((()', '(())', '()()', '()))']
    # 全部能正则化的情况
    for theString in posibilities:
        if isRegularization(theString) != 0:
            regularzations.append(theString) # regularzations = ['(())', '()()']
    if regularzations == []: # 没有正则化
        print -1
        break

    # 计算最小代价
    minValue = 9999
    minValueReg = ''
    for reg in regularzations: # reg = '(())'
        value = 0
        flag = 1
        for i in position:
            if reg[i] == '(':
                value += item[flag][0] # 加上左括号的代价
            else: # ')'
                value += item[flag][1] # 加上右括号的代价
            flag += 1
        if value < minValue:
            minValue = value
            minValueReg = reg
    print minValue
    print minValueReg

编程题2

#coding:utf-8

# 百度笔试题2

# 先处理输入
theString = raw_input()
base = int(theString.split(' ')[0]) # string型
luckyNum = int(theString.split(' ')[1]) # string型

if base < luckyNum:
    print luckyNum
elif base > luckyNum and len(str(base)) > len(str(luckyNum)):
    x = len(str(luckyNum)) # 幸运数的位数
    if int(str(base)[len(str(base)) - x : ]) <= luckyNum: # 假设base的后x位小于等于幸运数
        print str(base)[:len(str(base)) - x] + str(luckyNum)
    else: # base的后x为大于幸运数
        tagNum = int(str(base)[len(str(base)) -x -1:len(str(base)) -x]) # base比x高一位的数,int型
        tagNum += 1
        answer = (str(base)[:len(str(base)) - x - 1]) + str(tagNum) + str(luckyNum)
        print answer
elif base > luckyNum and len(str(base)) == len(str(luckyNum)):
    # 在luckNum的左面写个1即可了
    print '1' + str(luckyNum)
时间: 2024-08-25 18:09:41

百度2016笔试(算法春招实习)的相关文章

[2019 美团春招实习笔试] 2. 染色格子数量

时间限制:C/C++语言 1000MS:其他语言 3000MS内存限制:C/C++语言 65536KB:其他语言 589824KB题目描述:在二维平面上有一个无限的网格图形,初始状态下,所有的格子都是空白的.现在有n个操作,每个操作是选择一行或一列,并在这行或这列上选择两个端点网格,把以这两个网格为端点的区间内的所有网格染黑(包含这两个端点).问经过n次操作之后,共有多少个格子被染黑,显然在众多操作中,很容易重复染色同一个格子,这个时候只计数一次. 输入输入第一行包含一个正整数n(1<=n<=

2019春招、秋招总结【未加密】

这周接到了滴滴的薪资电话,只等签三方了,我秋招就算结束了,一个很满意的结果,薪资满意,而且10-7-5的工作时间很满意. 其实我九月底就没有继续面试笔试了,在准备毕业的事情,总结也是拖了很久一直想写,一直没写.列个流水账总结一下春招实习到秋招找工作的各种事情. 研究生一直在做机械臂的东西,后面为了找工作研究了一年视觉的东西.所以找工作的目标也是计算机视觉.春招实习被腾讯自动驾驶组招进去,实习了快三个月,主要内容是标定相关,自己太弱了,没法留在腾讯.秋招继续找工作,借着腾讯自动驾驶实习的"噱头&q

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

百度2016实习 前端试题中的编程题2:Excel地址的相互转换 [2015南桥杯试题]

百度2016实习 前端试题中的编程题2:Excel地址的相互转换  Excel是最常用的办公软件.每个单元格都有唯一的地址表示.比如:第12行第4列表示为:"D12",第5行第255列表示为"IU5". 事实上,Excel提供了两种地址表示方法,还有一种表示法叫做RC格式地址. 第12行第4列表示为:"R12C4",第5行第255列表示为"R5C255". 要求:编写程序,对换两种不同的表示方法表示行列,即 如果输入是常规地址

[转载]从春招到秋招,一个本科生的求职之路。

原文:从春招到秋招,一个本科生的求职之路. 自报家门,北理工软件学院本科生. 主要部分: 1.毕业去向选择 2.春招过程 3.暑期实习 4.秋招辛酸路程 5.一点感悟 1.毕业去向选择问题 从大一开始,就决定毕业找工作,方向是有了,但是三年多过去了,到现在才发现,大学期间并没有为这个方向做出太大的努力,这也成为我一个本科生找工作的很大障碍,实践能力严重不足.我的情况是:我决定工作,但是由于高中的思维,太看重学习成绩,成绩搞的很好,虽然有保研资格,但是又不读研,找工作的时候,好的互联网公司不看成绩

错过了春招的你,难道还不为秋招做准备吗

序 如今的校招,像一场突围赛,很多人"牺牲"在前进的路上,那些突围成功的人,不是因为他们刀枪不入,而是他们有扎实的准备,周密的计划以及可圈可点的技巧. 获得校招的成功,大致需要经历计划.准备.应聘这三个过程,文中全面覆盖这些内容. 无论你是刚刚进入大学的萌新,还是身处在大二.大三的任何阶段,这篇文章都尽可能给出一些建议和指导. 目录 简单的自我介绍 [计划]时间安排:对找工作的同学十分重要的时间点,以及如何安排自己的行程 [准备]技能清单:需要具备的能力 [准备]如何提高:如何有针对性

错过了春招,难道你还不为秋招做准备吗

序 如今的校招,像一场突围赛,很多人"牺牲"在前进的路上,那些突围成功的人,不是因为他们刀枪不入,而是他们有扎实的准备,周密的计划以及可圈可点的技巧. 获得校招的成功,大致需要经历计划.准备.应聘这三个过程,文中全面覆盖这些内容. 无论你是刚刚进入大学的萌新,还是身处在大二.大三的任何阶段,这篇文章都尽可能给出一些建议和指导. 目录 简单的自我介绍 [计划]时间安排:对找工作的同学十分重要的时间点,以及如何安排自己的行程 [准备]技能清单:需要具备的能力 [准备]如何提高:如何有针对性

阿里春招Android面经

作者:淘萄桃 链接: https://www.jianshu.com/p/a07ccaad832d 本文由作者授权发布. 笔者参加18年阿里春招,有幸最终拿到阿里offer,base杭州,岗位客户端开发.一直忙于其他事情,拿到意向已经过去十多天,在此分享一些关于面试的干货,攒一波RP,回馈社会. 从阿里面试说起,阿里的面试一般采用电话面试的形式.笔者一共参加五轮面试,一面电话面试+在线编程,二面视频面试+在线编程,三面部门boss面试,四面交叉面,五面HR.在此分享五轮面试的大概问题吧,笔者是a

[找工作] 2019秋招|从春招到秋招,Java岗经验总结(收获AT)

转自(有更多) https://blog.csdn.net/zj15527620802/article/month/2018/10 前言 找工作是一件辛酸而又难忘的历程.经历过焦虑.等待.希望,我们最终都能去到属于自己理想的地方. 从春招到秋招,我总计面试了数十家公司.春招面试了腾讯.去哪儿.360.小米.携程.华为.今日头条.美团.菜鸟网络等9家公司.除了今日头条止步三面.菜鸟物流备胎至七月底才回绝,其他公司均通过了面试.最后在美团和腾讯中纠结了一段时间后,选择了腾讯去实习.秋招腾讯转正的还算