700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 机器人编程java面试题 7届国赛java试题 4: 机器人塔

机器人编程java面试题 7届国赛java试题 4: 机器人塔

时间:2020-07-25 21:38:37

相关推荐

机器人编程java面试题 7届国赛java试题 4: 机器人塔

机器人塔(DFS)

X星球的机器人表演拉拉队有两种服装,A和B。他们这次表演的是搭机器人塔。

类似:

A

B B

A B A

A A B B

B B B A B

A B A B B A

队内的组塔规则是:

A 只能站在 AA 或 BB 的肩上。

B 只能站在 AB 或 BA 的肩上。

你的任务是帮助拉拉队计算一下,在给定A与B的人数时,可以组成多少种花样的塔。输入一行两个整数 M 和 N,空格分开(0

例如:

用户输入:

1 2

程序应该输出:

3

再例如:

用户输入:

3 3

程序应该输出:

4

思路:

我们输入的A,B的值先确定塔的层数,因为题目说了保证人数的合理性,无论A,B给多少人,能堆出来的塔的层数一定是唯一确定的。我们先从最后一层开始把最后一层的所有可能遍历出来,然后在用递推的方式一层一层的递归。c[r+1][l]==c[r+1][l+1]这个是当下面的字母相等时当前的这个位置一定为a,反之就是b。

程序:

a=list(map(int,input().split()))

s=sum(a)

ab=[1,2]

for i in range(2,1000):

if s==((i+1)*i)//2:

o=i

break

try:

c=[[0 for i1 in range(o+1)]for i in range(o+1)]

con=0

def ck(i,r,l):

if a[i]-1>=0:

c[r][l]=ab[i]

a[i]-=1

if l>=r:

dfs(r-1,0)

else:

dfs(r,l+1)

c[r][l]=0

a[i]+=1

def dfs(r,l):

global con

if r==-1:

con+=1

return

elif r==o-1:

for i in range(2):

ck(i,r,l)

elif c[r+1][l]==c[r+1][l+1]:

ck(0,r,l)

elif c[r+1][l]!=c[r+1][l+1]:

ck(1,r,l)

dfs(o-1,0)

print(con)

except:

print(0)

禁止转载。仅用于自己学习。对程序错误不负责。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。