'''
有两个数m和n,可以组合成任意的数,将组合成的输入按从小到大排列,求第t个数是多少
输入:两个数,第t个数
输入:3 8 5
输出:83
因为:3 8可以组成
3 8 33 38 83 88....
输入:3 7 100
输出:733737
'''
'''
方法一:可以看出第二组的四个数是由第一组的两个数生成的
第3组的8个数是由第二组的4个数生成的
依次类推,我们用count计算推到第几个数了
arr1记录前一个数组
arr2记录后一个数组
arr记录m和n
'''
def find_two_t(m,n,t):
min_num,max_num=min([m,n]),max([m,n])
if t==1:
return min_num
if t==2:
return max_num
#arr1记录开始的数据 arr2记录新生成的数组
arr1=[]
arr2=[]
arr1=[min_num,max_num]
count=2
while True:
for i in arr1:
arr2.append(str(i)+str(min_num))
count+=1
if count==t:
return str(i)+str(min_num)
arr2.append(str(i)+str(max_num))
count+=1
if count==t:
return str(i)+str(max_num)
arr1=arr2
arr2=[]
try:
m,n,t=map(int,input().split())
print(find_two_t(m,n,t))
except:
print('error')
结果:
'''
方法2:
我们发现一件事情由两个数组成的多位数是一个树模型
比如
3 8
33 38 83 88
333 338 383 388 833 838 883 888
相当于我们要找的树在第几层,这一层就是几位数,
我们先确定要找的树在第几层第几位,将3 8可以组成的位数进行一个全排列,并用arr1记录这一结果
最后对这个数组进行一个排序,取出第k个位置的树
'''
m,n,t=3,7,100
min_num,max_num=min(m,n),max(m,n)
a=2 #初始化层数的最大个数
b=0 #初始化层数
c=t #记录在该层数的位置数
#确定层数和位置树
while True:
c=c-a
b+=1
if c-a*2<0:
b+=1
break
a*=2
#print(c,b)
arr=[str(min_num),str(max_num)]
def dfs(arr,dep,path,record):
#dep 记录树的深度
#path 记录合成数的长度
#record 记录所有的数
if len(path)==dep:
record.append(''.join(path))
return
for i in arr:
path.append(i)
dfs(arr,dep,path,record)
path.pop()
return record
path=[]
record=[]
result_num=dfs(arr,b,path,record)
print(result_num[c-1])