将192分别与1、2、3相乘:
192*1=192;
192*2=384;
192*3=576;
连接这些乘积,我们得到一个1至9全数字的数192384576。我们称192384576为192和(1,2,3)的连接乘积。同样地,将9分别与1、2、3、4、5相乘,得到1至9全数字的数918273645,即是9和(1,2,3,4,5)的连接乘积。对于n > 1,所有某个整数和(1,2, … ,n)的连接乘积所构成的数中,最大的1至9全数字的数是多少?
def judging(n):#n表示连乘数字个数,(1,2,3)则表示n=3 std = ['1', '2', '3', '4', '5', '6', '7', '8', '9']#这里利用了list来判断相乘之后是否会出现全数字 maxnum = 0; string=''; a=int(0.9*pow(10,6-n)) b=int(1*pow(10,6-n)) for i in range(a,b): for y in range(1,n+1): string+=str(i*y) lst=list(string) lst.sort() if std==lst and maxnum<int(string): maxnum=int(string) string=''#记得每一次之后清空这个临时字符串 return maxnum if __name__ == '__main__': max=0; for i in range(2,6): temp=judging(i) print(temp) if temp>max: max=temp print(max)
注:本题重要的是理解题意,如果首先做理论分析的话,会发现(1,2,3)和(1,2,3,4)是不存在这样的数字的,而(1,2,3,4,5)只存在一个数字9,但n>=6时,已经不满足题设,所以有可能出现的就只有在(1,2)这个连乘了。