寻找神秘4位数:在0-9十个数字中任意选择4个数字,如选2,9,8,4这四个数字,组成最大的数是9842,最小的数是2489,然后相减,再把得到的4位数组成的最大与最小值相减,在这样重复的过程中,你能找到一个神秘的四位数吗?
# coding=UTF-8
import random'''
总体思路:
全集:[0,1,2,3,4,5,6,7,8,9]
提取子集:[2,4,9,8](依次为例)第1轮:
排序:[2,4,8,9]
最值:9842、2489
最值拆分:[9,8,4,2]
差值:9842-2489=7353
差值拆分:[7,3,5,3]
判断“最值拆分”与“差值拆分”是否相同:False,进入下一轮
最值拆分=差值拆分(赋值,开启下一轮)第2轮:
排序:[7,3,5,3]
最值:7533、3357
最值拆分:[7,5,3,3]
差值:7533-3357=4176
差值拆分:[4,1,7,6]
判断“最值拆分”与“差值拆分”是否相同:False,进入下一轮
最值拆分=差值拆分(赋值,开启下一轮)第3轮:
排序:[4,1,7,6]
最值:7641、1467
最值拆分:[7,6,4,1]
差值:7641-1467=6174
差值拆分:[4,1,7,6]
判断“最值拆分”与“差值拆分”是否相同:True,结束
''''''
定义一个函数,用来拆分4位数的个十百千位,并加入列表
如chaiFen(1234),返回[1,2,3,4]
'''
def chaiFen(num):geWei=num//1%10shiWei=num//10%10baiWei=num//100%10qianWei=num//1000chaiFen_list=[geWei,shiWei,baiWei,qianWei]return chaiFen_list#全集:建立一个包含0-9数字的列表全集,然后从里面取数字
num_list=[0,1,2,3,4,5,6,7,8,9]
#子集:从全集中任取4个数字,组成一个子集,例如[2,9,8,4]
subNum_list=random.sample(num_list,4)
#排序:对列表中的值进行排序,默认是升序,该方法没有返回值,但是会对列表的对象进行排序,[2,4,8,9]。
subNum_list.sort()i=1
while True:#将差值拆分成列表,排序。#最值:定义最大的数和最小的数,然后做减法,maxNum=9842,minNum=2489,maxNum=subNum_list[3]*1000+subNum_list[2]*100+subNum_list[1]*10+subNum_list[0]*1minNum=subNum_list[0]*1000+subNum_list[1]*100+subNum_list[2]*10+subNum_list[3]*1#差值subtraction=maxNum-minNum #subtraction=7353#差值拆分breakSubNum_list=chaiFen(subtraction) #[7,3,5,3]breakSubNum_list.sort() #[3,3,5,7]#最值拆分maxNum_list=chaiFen(maxNum)maxNum_list.sort() #[2,4,8,9]#判断:当差值拆分与最值拆分相等时,可以认为收敛,结束。if maxNum_list==breakSubNum_list:breakelse:print("第{}次:{}-{}={}".format(i,maxNum,minNum,subtraction))subNum_list=breakSubNum_listi+=1print("共运行{}次,该组数字是{}".format(i,breakSubNum_list))
运行结果: