2018秋招中国电信笔试题

1.求一个32bit的数的反转。
分析:1.考虑溢出问题,2.考虑尾部为0的反转。
转成字符串进行反转,然后再转成整形,如果溢出则为0

def process(data):
    result=0
    data1 = int(data)
    if data1 >= 0:
        result=int(data[::-1])
    else:
        result=-1*int(str(-1*data1)[::-1])
    if (result>2 ** 31-1) or (result<-2**31):
        return 0
    else:
        return result
data=raw_input()
print process(data)

2.读入一个自然数,将n的阶乘结果的数值的每一位相加,返回相加结果。
例如 n=14,输出结果为45.14!=87178291200,累加和为45.
分析:先计算阶乘,然后分割数字,累加

data=int(raw_input())
num=reduce(lambda x,y:x*y,range(1,data+1))
print sum(map(int,str(num)))

3.设a,b,c,d均是0-9之间的数字,abcd,bcda是两个四位数,且有abcd+bcda=8888.求满足条件的所有a,b,c,d的值。
输出描述:输出所有满足条件的a,b,c,d的值,a,b,c,d之间用空格隔开,每个输出占一行。
分析:a必须小于等于8,b必须小于等于8, d+a=8从而d必须小于等于8,b+c=8,c必须小于等于8.……
从而推出没有进位。
a+b=8
a+d=8 b=d
b+c=8 a=c
b=8-a
很奇怪,直接输出是显示格式不正确,所以才存起来,再输出的。

data=[]
for a in range(9):
    c=a
    b=d=8-a
    data.append([a,b,c,d])
for i in data:
    for j in i:
        print j,
    print

4.实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除,输出删除这些单词后的字符串,保持原顺序。
abcdd
dd
sssddfg
sssdd
分析:字典记录每个字符出现次数,然后删除最小的。

data=raw_input()
dict_data={}
for i in set(data):
    dict_data[i]=data.count(i)
min_value=min(dict_data.values())
result=""
for i in data:
    if dict_data[i]!=min_value:
        result+=i
print result

5.给定两个字符串,求他们前后重叠的最长子串的长度,比如abcde和cdefg是cde长度为3,注意是前后重叠,比如abcdeh和cdefg中的cde不是前后重叠,长度为0;
分析:后重叠与前重叠其实就是交换字符串位置。
提取data1的后字符串与data2的前字符串,相同则记录并终止程序,交换一次后再进行一次,统计最大值。

def process(a,b):
    max_num=0
    left = len(a) - len(b) if len(a) - len(b) > 0 else 0
    for i in range(left, len(a)):
        right = len(a) - i
        suba = a[i:i+len(a) - left]
        subb = b[0:right]
        print suba,subb
        if suba == subb:
            if len(suba) > max_num:
                max_num = len(suba)
            break
    return max_num

data=raw_input().split()
a,b=data[0],data[1]
print max(process(a,b),process(b,a))
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值