Python实现互联网笔试题-百度1、2

百度2017实习生-数据挖掘/机器学习编程题1

(个人背景:控制工程硕士二年级,编程小白。)

1. 题目描述 : 为了节省信息传递的数据量,A公司内部经常用一种简单的压缩方法来处理端口地址。举例:

[001011:110011:101101:000000]→[1011:110011:101101:]  (压缩)

[1011:1101::]→[100011:001101:000000:000000]  (解压)

输入:第一行一个整数a,a为0时表示任务为压缩,a为1时表示任务为解压。

接下来第二行为一个字符串,表示输入程序的端口信息,保证端口信息只有“0”,"1",":"三种字符。

输出:输出为一行字符串,表示压缩或者解压后得到的端口信息。

样例输入:

0

001011:110011:101101:000000     

样例输出:

1011:110011:101101:

时间限制:C/C++ 1000MS; 其他语言3000MS

内存限制:C/C++ 65536KB;其他语言 589824KB


这题读完题目感觉属于简单题。。。以下程序是我考完后一天思考写的(恩,考试的时候一道题都没做出来),版本是Python 2.7.13 。思路是用split()函数按冒号把输入的字符串存成4个元素的List,然后分别按元素处理。但为了输出的时候加上":",又把前三个字符串和最后一个分开处理了,程序有些冗余。还需改进。

import sys
a = int(sys.stdin.readline())
if a == 0:
     compress = sys.stdin.readline().strip().split(':')
    for i in range(3):
        if compress[i].startswith('0') and '1' in compress[i]:
            n = compress[i].find('1')
            compress[i] = compress[i][n:]+':'
        elif compress[i].startswith('1'):
            compress[i] = compress[i]+':'
        else:
            compress[i] = ':'
        sys.stdout.write(compress[i])
    if compress[3].startswith('0') and '1' in compress[3]:
        n = compress[3].find('1')
        compress[3] = compress[3][n:]    
    elif compress[3].startswith('1'):
            compress[3] = compress[i]
    else:
        compress[3] = ''
    sys.stdout.write(compress[3])
    
else:
    uncompress = sys.stdin.readline().strip().split(':')
    for i in range(3):
        uncompress[i] = uncompress[i].zfill(6)+':'
        sys.stdout.write(uncompress[i])        
    uncompress[3]=uncompress[3].zfill(6)
    sys.stdout.write(uncompress[3])                           


2.  题目描述 :小A是一个水环境研究员,她从各个监测站点收集不同的监测样本,她的研究重点为这些样本呈现的一些特殊的模式。为此,她编写了一个计算机程序来实时处理手机的数据,并确定哪些是她所感兴趣的,或者是可疑的。样本是否为感兴趣或认为可疑的需要满足一系列标准,如“样本值大于最近两小时的均值”或“样本值为最近5分钟的最小值”,诸如此类。

让小A困惑的是昨晚的程序输出结果,这也是她想你求助的原因。她觉得自己的程序输出结果似乎存在问题,希望你能够帮她验证。她给你所有的实验样本及测试条件,希望和你的输出结果进行比对并确定后续的工作。

输入:测试数据有多组,每组测试数据的第一行为一个整数N(1<=N<=10^5),表示实验样本数。随后的N行中每行表示一个样本,每行包含两个整数Ti和Vi(1<=Ti<=10^9, 1<=Vi<=10^4),表示Ti时采样的样本值为Vi。同一组样本中,样本的计时从过去某个时刻开始,以秒为单位,按时间递增的顺序排列。接下来的一行为一个整数C(1<=C<=10),为样本所需满足的条件数。随后的C行中,每行为一个条件项。每个条件项由空格分开的三部分构成:

1) 关系运算符R,可以是"gt"或"lt",表示大于或小于;

2) 集合函数F,可以是"min"、"max"或"avg",分别表示最大值、最小值和均值;

3) 单个整数L,表示所需考虑的时间段的长度。

一般来说,对样本的检验是将样本值Vi与Vi取样前的一段时间内取得的样本值集合的某个函数值进行比较,设Vi在时间Ti采样,Lj为Vi采样前的时间段,集合Sij为时间段(Ti-Lj, Ti)内采样到的所有样本(即样本Vi之间Lj时间段内采样的所有样本),则只有当关系“Vi Rj Fj(Sij)”成立时,样本Vi才满足条件Cj,如:某样本值为800,条件为“It min 300”表示“样本值800是否小于该样本采集前5分钟内的最小样本值?”,请注意,Vi不属于集合Sij。

输出:对每组测试数据中的每个条件,在单独的行中输出一个整数:满足给定条件的样本数量。若给定时间范围内没有样本,表示该条件不满足。

样例输入:

10

60 30 

120 28

180 35

240 34

300 40

360 31

420 28

480 2

540 42

600 30

2   

样例输出:


时间限制:C/C++ 1000MS; 其他语言3000MS

内存限制:C/C++ 65536KB;其他语言 589824KB


你可能感兴趣的:(Python笔记)