python 3学習1>>1、2、3、4、5、6、7、8、9を3つの3桁に組み合わせ、数字ごとに1回だけ使用し、3桁ごとに完全な平方数にすることを要求します.この3つの3桁を小さい順に出力します.

13086 ワード

pythonバージョンのソリューションが見つからなかった
import math
lt = []

#                 
for i in range(1,10):
    for j in range(1,10):
        if i == j:
            continue
        for x in range(1,10):
            if i == x or j == x:
                continue
            hh = i*100+j*10+x
            b = math.sqrt(hh)
            yy, y = math.modf(b)
            if yy == 0 :
                # print(i, j, x)
                lt.append(hh)

# print(lt)

import itertools
#        
lt2 = itertools.permutations(lt,3)
# print(list(lt2))
#         
for i in lt2:
    xx = ''
    for j in i:
        xx +=str(j)
    yy = sorted(xx)

    if len(set(yy)) == 9:
        print(xx[:3])
        print(xx[3:6])
        print(xx[6:])
        
        print('************')
        #                  
        break

隣の男の簡単な書き方
#      a            s  
def choose_number(a, s):
    a = str(a)
    if a[0] != a[1] and a[0] != a[2] and a[1] != a[2]:
        s.append(int(a))


#                 
def choose_three(a, b, c):
    a1 = str(a)
    b1 = str(b)
    c1 = str(c)
    d = a1+b1+c1
    d = set(d)
    if len(d) == 9:
        return 1
    else:
        return 0


s = []
for i in range(10, 32):
    # print(i)
    choose_number(i*i, s)
for i in range(len(s)-2):
    for j in range(i+1, len(s)-1):
        for k in range(j+1, len(s)):
            if choose_three(s[i], s[j], s[k]) == 1:
                print(s[i], s[j], s[k])


# print(choose_number(10*10,s))