- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2021中国电信数据分析笔试
中国电信数据分析笔试——三道编程题
1 找丑数
若⼀个数的因⼦只有2,3,5,那么这个数称为丑数,1是第⼀个丑数,2是丑数,7不是丑数 。
要求给定⼀个整数N, 返回第N个丑数
思路:递归,基线条件第⼀个丑数为1 ;递归条件:第N个丑数为N-1个丑数后⾯的那个丑数 。如何判定丑数?
a = 2^i 3^j 5^k ,则为a丑数
N =int(input())
def whoisNthugly(N):
if N == 1:
return 1
if N1:
r = whoisNthugly(N-1)+1
i,j ,k= 0,0,0
while 1:
a=r
while a !=1 : # a==1找到丑数
if a%2==0:
a = a/2
elif a%3==0:
a = a/3
elif a%5==0:
a = a/5
else :
r+=1
break
return r
N=10
whoisNthugly(N)
12
2 找⼦列
给定⼀组整数,要求找到⼀组⼦列使其和最⼤,但原数组中相邻的数只能选⼀个。返回其和
思路:分⽽治之,不断转化为简单的情况。 基线条件:若列表长度为0, 和为0;若长度为1或2,和为较⼤的那个数 。
递归条件:若列表长度⼤于3, 找到最⼤的数a, 将a和与a相邻的数删除⽣成⼦列,该列表的和为a加⼦列的和
def findbiggset(li):
if len(li)==0:return 0
if len(li)==1 or len(li)==2 :
return max(li)
else :
a = max(li)
k=li.index(max(li))
if k==len(li)-1:
li = li[:-2]
elif k==0:
li=li[2:]
else :
li = li[:k-1]+li[k+2:]
#print(li)
return a+findbiggset(li)
li=[2,4,2,5,6]
findbiggset(li)
10
3 a,b,c,d属于[0,9] ,使得abcd+bcda=8888 的abcd 有⼏种?
思路:没想到好的⽅法,总的可能也不多,遍历。
u=0
for a in range(10):
for b in range(10):
for c in range(10):
for d in range(10):
i = a*10**3+b*10**2+c*10+d
j = b*10**3+c*10**2+d*10+a
if i+j==8888:
#print(a,b,c,d,b,c,d,a)
u+=1
print(u)
9
文档评论(0)