python3学习1>>把1、2、3、4、5、6、7、8、9组合成3个3位数, 要求每个数字仅使用一次,使每个3位数均为完全平方数。 按从小到大的顺序输出这三个三位数。

竟然没找到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))

你可能感兴趣的:(python3学习1>>把1、2、3、4、5、6、7、8、9组合成3个3位数, 要求每个数字仅使用一次,使每个3位数均为完全平方数。 按从小到大的顺序输出这三个三位数。)