第7回全国選手権javaテスト4:二乗数を構成する

凑平方数


0から9までの10個の数字を複数のグループに分け、各グループは正確に正方形の数字です。これは実行できます。例:0、36、5948721
および例:1098524736 1、25、6390784 0、4、289、15376など...
0は独立した番号として使用できますが、複数の桁の先頭として使用することはできません。グループ化する場合、すべての番号を使い切る必要があり、繰り返したり省略したりすることはできません。
小さいグループのデータの順序がカウントされない場合、いくつの異なるグループ化スキームがありますか?

アイデア:
この質問は全体の配置に似ています。最初に10桁の正方形の数字を保存し、次に保存された正方形の数字を互いに配置してから、10個の異なる数字を取り出して解決策を見つけます。答えは300です。

プログラム:

con=0
def dfs(s,k):
    global con
    if len(s)>=10 or k>=len(z):
        if len(s)==10 and 10==len(set(str(s))):

            con+=1
        return
    for i in range(k,len(z)):
        s1=z[i]+s
        if len(s1)>10:
            break
        dfs(s1,i+1)
z=[]
for i in range(0  ,100000):
    i=i*i
    if len(list(str(i)))==len(set(str(i))):
        z.append(str(i))
dfs("",0)
print(con)

転載は禁止されています。自習のみ。プログラムエラーについては責任を負いません。

おすすめ

転載: blog.csdn.net/weixin_46640345/article/details/112852002