Python学习笔记(四):2019届优招华为软件类笔试编程(8.29)

我都已经快不记得是哪一天做的华为的笔试了,只记得是武长地区优招的最后一波,说是想要在九月份第一批offer发放时有机会就得做.由于我之前一直在公司实习压根就没啥准备,实在没办法了,不能一直延后.>>收到短信说泡在池子里了,到现在了也没消息
我学的比较杂,之前在学校用MATLAB,后来实习开始学Scala,现在又用Python,又接触Java,就都学的很浅显,我也很无奈啊.做笔试前一天晚上看了下华为的题目,很多都是数值处理的编程,直觉用Python会相对容易一些,于是就开始临时抱佛脚了(先说,我Python基础很渣…没用多久).

(一)在一个字符串中,找出所有的整数并求和

题目描述

给定一个字符串str,求其中全部整数数字之和

输入描述

1、忽略小数点,例如”A1.2”,认为包含整数1和2;
2、如果整数的左侧出现字符 “-“,则奇数个认为是负整数,偶数个认为是正整数。
例如”AB-1CD- -2EF- - -3” ,认为包含整数-1、2和-3。
(注意:这里的”-“与”-“间是连续的,没有空格隔开)

输出描述

输出即为字符串中所有整数数字之后。

解答

没什么好说的,直接放Python代码吧,综合了网上的一个进行了修改的:

import sys
a = sys.stdin.readline()
sum,num,pos=0,0,1
if a=='':
    print 0
for i in xrange(0,len(a)):
    if 48<= ord(a[i])<57:
        num=num*10+int(a[i])*pos
    else:
        sum+=num
        num=0
        if a[i]=='-':
            if i-1>-1 and a[i-1]=='-':
                pos=-pos
            else :
                pos =-1
        else:
            pos=1
sum+=num
print sum

(三)斐波那契数列递归

题目描述

一个农夫饲养了一批怪物牛,他发现这批牛的繁殖能力惊人,一对牛每月繁殖一对小牛。每一对小牛在出生后,需要花三个月时间来生长,第四个月开始繁殖。

输入描述

第一行输入N,表示N组数据
第二行开始,输入N组数据,每组数据两行:分别为M(1 ≤M ≤100)对牛,第N(1≤N≤50)个月

输出描述

输出N组数据的结果,每组结果占一行
假设怪物牛不存在死亡的情况,计算开始初始数量为M(1 ≤M ≤100)对牛的情况下,第N(1 ≤N≤50)个月牛的总数(对)

解答

#coding=utf-8
import sys
if __name__ == "__main__":
    # 读取第一行的n
    n = int(sys.stdin.readline().strip())
    for j in range(n):
        # 读取每一行
        line1 = int(sys.stdin.readline().strip())  #line1对牛
        line2 = int(sys.stdin.readline().strip())  #line2个月
        ans = []
        for i in range(line2):
            if i ==0 or i==1 or i==2 or i==3:
                 ans.append(i+2)
            else:
                ans.append(ans[i-1]+ans[i-4])
        print (ans[line2-1])*line1

(二)多项式

题目描述

多项式 的系数[b(2) b(1) b(0)]=[1 2 5]
二者相乘所得的多项式 的系数[c(3) c(2) c(1) c(0)]=[1 3 7 5]
利用上面的计算方法,我们很容易得到:
c(0)=a(0)b(0)
c(1)=a(0)b(1)+a(1)b(0)
c(2)=a(0)b(2)+a(1)b(1)+a(2)b(0)
c(3)=a(0)b(3)+a(1)b(2)+a(2)b(1)+a(3)b(0)
其中:a(3)=a(2)=b(3)=0
在上面的基础上推广一下:
假定两个多项式的系数分别为a(n),n=0~n1和b(n),n=0~n2,这两个多项式相乘所得的多项式系数为c(n),则:
c(0)=a(0)b(0)
c(1)=a(0)b(1)+a(1)b(0)
c(2)=a(0)b(2)+a(1)b(1)+a(2)b(0)
c(3)=a(0)b(3)+a(1)b(2)+a(2)b(1)+a(3)b(0)
c(4)=a(0)b(4)+a(1)b(3)+a(2)b(2)+a(3)b(1)+a(4)b(0)
以此类推可以得到卷积算法:
上面这个式子就是a(n)和b(n)的卷积表达式。
通常我们把a(n)和b(n)的卷积记为:a(n)b(n),其中的表示卷积运算符

输入描述

两个最高阶数为4的复数多项式系数序列。高阶系数先输入;每个系数为复数,复数先输入实数部分,再输入虚数部分; 实部或者虚部为0,则输入为0;
每个实部和虚部的系数最大值不超过1000

输出描述

求卷积多项式系数输出;先输出高阶系数,多项式算法.

解答

……


抱歉,这一题当时一看题目觉得太长就没深入理解了,后面也一直搁着没写.后面有空的时候再来补充吧,没找到Python或C++写的,网上看到厉害的大神有用Java写的:https://www.nowcoder.com/discuss/100519,前面写的两道题感觉都还比较简单.

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值