求使x平方各位互不相同的九位数x(python)实现

'''
求x,使得x的平方为一个各个位数字互不相同的9位数字。

算法设计:
    由x的平方为一个九位数可以得出,x的取值范围在10000--32000之间
    1、设置10个元素的状态数组p,记录数字0--9在x的平方中出现的情况,数组元素都赋予初值1,表示数字0--9没有被使用过
    2、对尝试的每一个数x,求x*x,并取其各个位数字,数字作为数组的下标,若对应元素为1,则改数字第一次出现,将对应元素赋值为0,表示改数字已经出现过一次,否则,若对应元素为0,则说明由重复数字,结束这次尝试
    3、当状态数组p中9个元素都都为0是,则找到了问题的解,但这样判定由有解,需要扫描一遍数组p,为避免这个操作,设置计数器k,在取x*x各个位数字的过程中记录不同的数字的个数,当k=9时,就找到了问题的解
'''

def main():
    p = []
    for i in range(0, 10):
        p.append(1)
    num = 0
    for x in range(10000,32000):
        for i in range(0,10):
            p[i] = 1
        y1 = x**2
        y2 = y1
        k = 0  #计数器,若k=9 则说明此数符合条件
        for i in range(0,10):
            t = y2 % 10
            y2 = y2 // 10
            if p[t] == 1:
                k +=1
                p[t] = 0
            else:
                break
        if k == 9:
            num +=1
            print("第 %d 组:x = %d,x**2 = %d" %(num,x,y1))

if __name__ == '__main__':
    main()

运行结果:

1 组:x = 10124,x**2 = 1024953762 组:x = 10128,x**2 = 1025763843 组:x = 10136,x**2 = 1027384964 组:x = 10214,x**2 = 1043257965 组:x = 10278,x**2 = 1056372846 组:x = 12582,x**2 = 1583067247 组:x = 12586,x**2 = 1584073968 组:x = 13147,x**2 = 1728436099 组:x = 13268,x**2 = 17603982410 组:x = 13278,x**2 = 17630528411 组:x = 13343,x**2 = 17803564912 组:x = 13434,x**2 = 18047235613 组:x = 13545,x**2 = 18346702514 组:x = 13698,x**2 = 18763520415 组:x = 14098,x**2 = 19875360416 组:x = 14442,x**2 = 20857136417 组:x = 14743,x**2 = 21735604918 组:x = 14766,x**2 = 21803475619 组:x = 15353,x**2 = 23571460920 组:x = 16549,x**2 = 27386940121 组:x = 16854,x**2 = 28405731622 组:x = 17252,x**2 = 29763150423 组:x = 17529,x**2 = 30726584124 组:x = 17778,x**2 = 31605728425 组:x = 17816,x**2 = 31740985626 组:x = 20089,x**2 = 40356792127 组:x = 20513,x**2 = 42078316928 组:x = 20754,x**2 = 43072851629 组:x = 21397,x**2 = 45783160930 组:x = 21439,x**2 = 45963072131 组:x = 21744,x**2 = 47280153632 组:x = 21801,x**2 = 47528360133 组:x = 21877,x**2 = 47860312934 组:x = 21901,x**2 = 47965380135 组:x = 22175,x**2 = 49173062536 组:x = 22456,x**2 = 50427193637 组:x = 23113,x**2 = 53421076938 组:x = 23682,x**2 = 56083712439 组:x = 23728,x**2 = 56301798440 组:x = 23889,x**2 = 57068432141 组:x = 24009,x**2 = 57643208142 组:x = 25279,x**2 = 63902784143 组:x = 26152,x**2 = 68392710444 组:x = 26351,x**2 = 69437520145 组:x = 27105,x**2 = 73468102546 组:x = 27209,x**2 = 74032968147 组:x = 27984,x**2 = 78310425648 组:x = 28171,x**2 = 79360524149 组:x = 28256,x**2 = 79840153650 组:x = 28346,x**2 = 80349571651 组:x = 28582,x**2 = 81693072452 组:x = 28731,x**2 = 82547036153 组:x = 29208,x**2 = 853107264

版权声明:本文为time_money原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。