2020届华为面试题【Python】

文章目录

  • 华为 【Python】
    • 一、题目描述:找质数,求出并输出这些质数的个位数之和与十位数之和两个数中的较小值。
      • 1)分析思路:
      • 2)代码如下:
    • 二、题目描述:求两个字符串的最大公共子串
      • 1)分析思路:
      • 2)代码如下:

华为 【Python】

一、题目描述:找质数,求出并输出这些质数的个位数之和与十位数之和两个数中的较小值。

质数的定义为:在大于1的自然数中,除了1和它本身,不能整除其他自然数,如:2,3,7等
给定一个取值范围:[low,high),找出该范围的所有质数,输出这些质数的个位数之和与十位数之和的较小值。

1)分析思路:

1:找出该范围的所有质数,并将所有的质数存放在一个列表中(以便之后的取用)
2:使用for循环,计算出 :这些质数的个位数之和与十位数之和
3:使用if判断语句找出这些质数的个位数之和与十位数之和的较小值,并输出该最小值。

2)代码如下:

low = int(input('请输入一个大于0的整数:'))    
high = int(input('请输入一个大于low的整数:'))
#注:input('')的数据类型为:字符串,因为本题需要用到整型,
#故需要使用int()进行强制转换:将字符串转换成整型
zhishu = []                                     #创建一个列表,用来存放质数
for  num0 in range(low,high):
    if num0 > 1: 
        if num0 ==2:
            zhishu.append(num0)          
        else:
            for i in range(2,num0):             #这里的for 和 else 是一对
                if (num0 % i) == 0:
                    break 
            else:
                zhishu.append(num0)
print(zhishu)
shiwei =0
gewei = 0
for i in zhishu:
    gewei=gewei + (i%10)                       # (i%10):求出个位数
    shiwei = shiwei+(int(i%100/10))            
    #int(i%100/10):求出十位数,其中int()为取出整数部分,即得到十位数
print('所有质数的个位数之和为:%i'%gewei)
print('所有质数的十位数之和为:%i'%shiwei)
if gewei>shiwei:
    print('打印出所有质数个位数之和,和十位数之和中最小的值,并输出最小值为:%i'%shiwei)
elif gewei<shiwei:
    print('打印出所有质数个位数之和,和十位数之和中最小的值,并输出最小值为:%i'%gewei)
elif gewei ==shiwei:
    print('打印出所有质数个位数之和,和十位数之和中最小的值,并输出最小值为:%i'%shiwei)

结果:
[2, 17, 67]
所有质数的个位数之和为:16
所有质数的十位数之和为:7
打印出所有质数个位数之和,和十位数之和中最小的值,并输出最小值为:7

注:重要!!!
这里要细细品味这段代码,else其实不是和if是一对,而是和for并排的,
我们常见的是if…else…或者if…elif…else诸如此类,
但其实for或while也可以和else搭配出现,在这段代码里,当某一次遍历结果余数为0后,break生效,那循环就结束了,那与之成对出现的else代码也就不执行了;当所有遍历结束后没有一次余数为0,那该循环就转到else开始执行,打印输出“该数为质数”。

二、题目描述:求两个字符串的最大公共子串

示例
输入:

‘abcd’
‘abcdabab’

输出:

4
abcd

1)分析思路:

分析:

1:sx = ‘abcd’
sy = ‘abcdabab’
2:找出这连个字符串中较短的字符串,作为“一把"伸缩尺”,来在第二个字符串中寻找他们之 间的最大公共字符串,
思考:该最大公共字符串长度可能出现的长度为:4,3,2,1。如果长度为4的话,那么理解为第一个短的字符串在第二个字符串中出现过。
3:如图所示:理解 i,j 、j = rang(len(str1)+1-i)
2020届华为面试题【Python】_第1张图片

2)代码如下:

'''
sx = 'abcd'
sy = 'abcdabab'
#找出较短的字符串
if len(sx) > len(sy):
    str1 = sy
    str2 = sx
else:
    str1 = sx
    str2 = sy
#str1 为较短的字符串   
max = 0
for i in range(len(str1),0,-1):    #字符串长度:从大到小,则第一个相同的,则为最大公共字符串,#较大程度减少算法复杂度
    for j in range(len(str1)+1-i):  #难度:j 的取值范围: len(str1)+1-i ,详细解释见思路分析 
        if str1[j:j+i] in  str2:
            max = i
            chuan = str1[j:j+i]
            break
    if max >0:
        break
if max > 0:
    print('最大公共子串的字符数为:%i'%max)
    print('最大公共子串为:%s'%chuan)
else:
    print('不存在最大公共子串')

结果:

最大公共子串的字符数为:4
最大公共子串为:abcd

你可能感兴趣的:(大厂笔试题)