其他分享
首页 > 其他分享> > python(牛客)试题解析1

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码系数的英文字母

标签:python,牛客,解析,程序流程,字符串数,规定键入,运转
来源: