'''
求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 = 102495376
第 2 组:x = 10128,x**2 = 102576384
第 3 组:x = 10136,x**2 = 102738496
第 4 组:x = 10214,x**2 = 104325796
第 5 组:x = 10278,x**2 = 105637284
第 6 组:x = 12582,x**2 = 158306724
第 7 组:x = 12586,x**2 = 158407396
第 8 组:x = 13147,x**2 = 172843609
第 9 组:x = 13268,x**2 = 176039824
第 10 组:x = 13278,x**2 = 176305284
第 11 组:x = 13343,x**2 = 178035649
第 12 组:x = 13434,x**2 = 180472356
第 13 组:x = 13545,x**2 = 183467025
第 14 组:x = 13698,x**2 = 187635204
第 15 组:x = 14098,x**2 = 198753604
第 16 组:x = 14442,x**2 = 208571364
第 17 组:x = 14743,x**2 = 217356049
第 18 组:x = 14766,x**2 = 218034756
第 19 组:x = 15353,x**2 = 235714609
第 20 组:x = 16549,x**2 = 273869401
第 21 组:x = 16854,x**2 = 284057316
第 22 组:x = 17252,x**2 = 297631504
第 23 组:x = 17529,x**2 = 307265841
第 24 组:x = 17778,x**2 = 316057284
第 25 组:x = 17816,x**2 = 317409856
第 26 组:x = 20089,x**2 = 403567921
第 27 组:x = 20513,x**2 = 420783169
第 28 组:x = 20754,x**2 = 430728516
第 29 组:x = 21397,x**2 = 457831609
第 30 组:x = 21439,x**2 = 459630721
第 31 组:x = 21744,x**2 = 472801536
第 32 组:x = 21801,x**2 = 475283601
第 33 组:x = 21877,x**2 = 478603129
第 34 组:x = 21901,x**2 = 479653801
第 35 组:x = 22175,x**2 = 491730625
第 36 组:x = 22456,x**2 = 504271936
第 37 组:x = 23113,x**2 = 534210769
第 38 组:x = 23682,x**2 = 560837124
第 39 组:x = 23728,x**2 = 563017984
第 40 组:x = 23889,x**2 = 570684321
第 41 组:x = 24009,x**2 = 576432081
第 42 组:x = 25279,x**2 = 639027841
第 43 组:x = 26152,x**2 = 683927104
第 44 组:x = 26351,x**2 = 694375201
第 45 组:x = 27105,x**2 = 734681025
第 46 组:x = 27209,x**2 = 740329681
第 47 组:x = 27984,x**2 = 783104256
第 48 组:x = 28171,x**2 = 793605241
第 49 组:x = 28256,x**2 = 798401536
第 50 组:x = 28346,x**2 = 803495716
第 51 组:x = 28582,x**2 = 816930724
第 52 组:x = 28731,x**2 = 825470361
第 53 组:x = 29208,x**2 = 853107264
版权声明:本文为time_money原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。