题目一
输入几个字符串,保证输出字符串长度为8,如abc 123456789,输出12345678 90000000 abc00000.
输入:2 abc 123456789
2表示输入两个字符串,abc和123456789表示两个输入的字符串
思路:
即abc字符串长度小于8,那么后面就要补0使其长度等于8,123456789长度为9,那么就要将其进行切分,12345678为一个输出字符串,9作为一个新的字符串,因为其长度为1,所以我们要在后面补0使其长度为8,最后,将所有的转换后字符串按照从小到大的顺序进行输出。
代码:
nums=[i for i in input().split(' ')]
length=int(nums.pop(0))
res=[]
for i in range(length):
if not nums[i]:continue
elif len(nums[i])<=8:
res.extend([nums[i]+'0'*(8-len(nums[i]))])
elif len(nums[i])>8:
m=0
while 8*(m+1)<len(nums[i]):
res.append(nums[i][8*m:8*(m+1)])
m+=1
res.append(nums[i][8*m:]+'0'*(8*(m+1)-len(nums[i])))
res.sort()
print(' '.join(res))
题目二
题意:输入一个字符串,字符串中有大括号小括号中括号,且保证都是有效括号,即不存在(()这种情况,同时每一个括号内都有一个或多个字母,括号还可以相互嵌套,每个括号的前面都有一个数字,如3(AB),表示ABABAB,最后我们将这个字符串展开后逆序输出。
例:输入abc3(A) 输出AAAcba
输入abc3(3(A)2(B)) 输出BBAAABBAAABBAAAcba
思路:
我最开始把这道题想简单了,只想了单个括号,以及未嵌套的情况,所以当我测试许久发现想错了,头就有点蒙,以至于最后也没搞出来。
下面的代码是牛客上一位大佬的思路,我自己又写了下,这个代码巧妙的运用了栈!!还有他巧妙的利用了有效括号的特点(这个我自己编的时候也想到了,就是没想到用栈保存数字,以及逻辑没有弄明白#-#,还是需要多写算法题)。
代码:
#全部代码皆是基于有效括号编写的
strs=input()
res=''
number=[]
for i in strs:
if i.isdigit(): #这是个判断是否是数字的函数
number.append(i) #这里保存数字
elif i==')':
tmp=''
thisnumb=int(number.pop()) #利用栈
j=-1
while j>-len(res):
if res[j]!='(': #将括号排除
tmp+=res[j]
j-=1
else:
break
res=res[:j]+thisnumb*tmp[::-1]#更新res
elif i==']':
tmp=''
thisnumb=int(number.pop())
j=-1
while j>-len(res):
if res[j]!='[':
tmp+=res[j]
j-=1
else:
break
res=res[:j]+thisnumb*tmp[::-1]
elif i=='}':
tmp=''
thisnumb=int(number.pop())
j=-1
while j>-len(res):
if res[j]!='{':
tmp+=res[j]
j-=1
else:
break
res=res[:j]+thisnumb*tmp[::-1]
else:
res+=i
print(res[::-1])
题目三
m*n的矩阵,从A点到B点,矩阵里面每个数字代表海拔 只能上下左右走 只能走比当前位置的海拔高的地方,求有几条路径可以从A走到B
输入:
4 5
0 1 0 0 0
0 2 3 0 0
0 0 4 5 0
0 0 7 6 0
0 1 3 2
第一行表示矩阵四行五列,最后一行表示A(0,1)和B(3,2)
注?:
这个题我是后来做的,自己想的简单测试案例通过了,牛客网的测试案例就不知道了。另外,由于递归的不熟悉,我用了数组来解决我递归出入口不会的问题。看牛客网上好多人说的也差不多是这个递归,但是他们都说超时。
代码:
a=[int(i) for i in input().split(' ')]
m,n=a[0],a[1]
nums=[]
for j in range(m):
nums.extend([[int(i) for i in input().split(' ')]])
node=[int(i) for i in input().split(' ')]
begin_x,begin_y,end_x,end_y=node[0],node[1],node[2],node[3]
result=0
def solution(nums,i,j):
if i==end_x and j==end_y:
result+=1
return result
if j>0 and nums[i][j-1]>nums[i][j]:
solution(nums,i,j-1)
if j<n-1 and nums[i][j+1]>nums[i][j]:
solution(nums,i,j+1)
if i>0 and nums[i-1][j]>nums[i][j]:
solution(nums,i-1,j)
if i<m-1 and nums[i+1][j]>nums[i][j]:
solution(nums,i+1,j)
print(solution(nums,begin_x,begin_y))