python(牛客)试题解析1


一、NC103翻转字符串数组

叙述:写出一个程序流程,接纳一个字符串数组,随后导出该字符串数组翻转后字符串数组。(字符串数组长度不得超过1000)

实例:键入:"abcd",导出传参:"dcba"

分析1:转走字符串数组里的物质组成目录,并翻转目录,再度导出为字符串数组

classSolution:

defsolve(self,str:str)->str:

#writecodehere

list1=[]

foriinstr:

list1.append(i)

list1.reverse()

s=""

foriinlist1:

s=s+i

returns

分析2:运用字符串数组的切成片倒序导出

classSolution:

defsolve(self,str:str)->str:

str1=str[::-1]

returnstr1

二、NC141确定是否为回文字符串数组

叙述:给出一个长度为n的字符串数组,请撰写一个函数分辨该字符串数组是不是回文。假如是回文请返回true,不然回到false。字符串数组回文指该字符串正序与其说反序逐标识符一致。

实例:键入:"absba",传参:true;键入:"ranko",传参:false

分析1:翻转字符串数组,并提高分辨

classSolution:

defjudge(self,str:str)->bool:

str1=str[::-1]

ifstr1==str:

returnTrue

else:

returnFalse

分析2:应用三母关系式简单化导出

classSolution:

defjudge(self,str:str)->bool:

returnTrueifstr[::-1]==str[:]elseFalse

三、NC151 最大公约数

叙述:如果有一个当然数a会被整数b能整除,则认为a为b的倍率,b为a的约数。好多个整数公有制的约数,称为这些自然数的公约数。公约数中最大的一个公约数,称之为这些自然数的最大公约数。键入a 跟b,请返回a 跟b 的最大公约数。

实例:键入3,6,回到3;键入8,12,回到4

分析1:根据因式分解取下每一个数的质因数,随后赋值寻找2组质因数里边同样的质因数,最终根据乘积获得最大公约数

classSolution:

defgcd(self,a:int,b:int)->int:

#a=30

#b=40

res1=[]

res2=[]

res3=[]

#因式分解

whilea>1:

foriinrange(a-1):

k=i+2

ifa%k==0:

res1.append(k)

a=int(a/k)

break

#print(res1)

whileb>1:

foriinrange(2,b+1):

ifb%i==0:

res2.append(i)

b=int(b/i)

break

#print(res2)

foriinrange(0,len(res1)):

ifres1[i]inres2:

res3.append(res1[i])

res2.remove(res1[i])

res=1

foriinres3:

res=res*i

#print(res)

returnres

分析2:奔走相加减法,计算起来也是简约:源于《九章算术》的一种求最大公约数的优化算法,它本来是为约分量身定做的,但是它适用一切必须求最大公约数的场所,以比较大的数减比较小的数,然后把所获得的差与比较小的数较为,并且以绝大多数减少数。再次这种操作,直至所获得的减数和差相同才行。则第一步大约完的多个2的积与第二步中等水平数字的相乘便是所愿的最大公约数

classSolution:

defgcd(self,a:int,b:int)->int:

t=0

m=0

n=0

#奔走做差加减法

ifa==b:

t=a

else:

m=max(a,b)

n=min(a,b)

t=m-n

whilen!=t:

m,n=max(n,t),min(n,t)

t=m-n

returnt

四、NC65斐波那契等差数列

叙述:规定键入一个整数n,麻烦你导出斐波那契等差数列的第n项,且第一个和第二个数据均是1

实例:键入4,依据斐波那契等差数列的概念得知,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3,因此回答为3。

分析1:应用递归算法的形式,但由于时间复杂度比较高,当数据信息比较大的,运转的时间比较长

classSolution:

defFibonacci(self,n:int)->int:

ifn==1orn==2:

return1

elifn==3:

return2

else:

returnself.Fibonacci(n-1)+self.Fibonacci(n-2)

分析2:应用for周而复始的方法,运用纪录中间变量temp防止了反复测算

classSolution:

defFibonacci(self,n:int)->int:

a,b=1,1

ifn<=1:

return1

else:

foriinrange(2,n):

tmp=a+b

a=b

b=tmp

returnb

五、键入一个由n个英文大小写所组成的标识符,按Ascii码值从小到大排序,查找字符串中第k个最少Ascii码系数的英文字母

本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;

2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;

3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;

4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;

5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/293299.html

(0)
上一篇 2022年11月19日
下一篇 2022年11月19日

相关推荐

发表回复

登录后才能评论