请编写一个函数(允许增加子函数),计算n x m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
def f(m,n):
if m == 0 or n == 0:
return 1
## 当m,n其中一个为0,则只有一条路径
return f(m,n-1) + f(m-1,n)
while True:
try:
m,n = map(int,input().split())
## map()函数,可以将列表中的数据进行类型转换
print(f(m,n))
except:
break
解题过程:
从(m, n)—>(0, 0)就分两步走:
往右走一步:f(m, n - 1)—>(0, 0) ; 往下走一步:f(m - 1, n)—>(0, 0)
注意:但凡是触碰到边界,也就是说f(x, 0)或者f(0,x)都只有一条直路可走了,这里的x是变量哈。
可以转变为递归: f(m, n) = f(m, n - 1) + f(m - 1, n)
输入描述:
输入一个字符串。
输出描述:
输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不间隔),但是长度还是一串的长度,与数字字符串间用逗号间隔。
import re
def myfunc(x):
## 找到字符串中数字的部分,采用正则
contents = re.findall(r'([0-9]+)', str(x))
result = []
max_len = 0
for content in contents:
if len(content)>= max_len:
max_len = len(content)
obj = ''
for content in contents:
if len(content) == max_len:
obj = obj + content
return obj + ',' + str(max_len)
x = input()
print(myfunc(x))