2017华为笔试题

刚才做完华为笔试题,大部分都是对数值、字符串进行处理,如果选择Python来进行处理,效率提高不止一点点!

废话不多说,直接上代码:

题1:

# -*- coding: utf-8 -*-
"""
Created on Fri Mar 24 23:26:33 2017

@author: acelit
"""

#问题描述:将两个正整数按照从高位到低位取反后相加
#输入:两个[1,70000]内的整数
#输出:;两个整数取反和

def reverseAdd(a,b):
    if a < 1 or a > 70000 or b < 1 or  b > 70000:
        return -1
    else:
        astr = str(a)
        bstr = str(b)
        arev = brev = 0
        indexa = indexb = 0
        for i in astr:
            arev += int(i)*10**indexa
            indexa += 1
        for j in bstr:
            brev += int(j)*10**indexb
            indexb += 1
    return arev + brev
    
#测试
num1 = 6768
num2 = 9002
revSum = reverseAdd(num1, num2)   
print revSum


题2:

# -*- coding: utf-8 -*-
"""
Created on Fri Mar 24 20:19:51 2017

@author: acelit
"""
#问题描述:按照6种方式旋转骰子,输出骰子最后的标记
#旋转骰子:L-向左 R-向右 F-向前 B-向后 A-逆时针旋转90度 C-顺时针旋转90度
#骰子标记:初始标记123456,分别为左右前后上下
#输入:骰子旋转序列
#输出:骰子对应标记,若输入字符串不合法则返回-1
def splitString(string):
    num = [1,2,3,4,5,6]
    for i in string:
        if i == 'L':
            num = [num[4],num[5],num[2],num[3],num[1],num[0]]
        elif i == 'R':
            num = [num[5],num[4],num[2],num[3],num[0],num[1]]
        elif i == 'F':
            num = [num[0],num[1],num[4],num[5],num[3],num[2]]
        elif i == 'B':
            num = [num[0],num[1],num[5],num[4],num[2],num[3]]
        elif i == 'A':
            num = [num[3],num[2],num[0],num[1],num[4],num[5]]
        elif i == 'C':
            num = [num[2],num[3],num[1],num[0],num[4],num[5]]
        else:
            return -1
    return str(num[0])+str(num[1])+str(num[2])+str(num[3])+str(num[4])+str(num[5])

#测试
test = 'RA'
result = splitString(test)
print result


对比一下C++/Java的实现代码,我只有一个感受:

Life is short, I use Python!:)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老A的AI实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值