这道题是我去年在实验吧做过的,当时基本是全爆破,所以虽然的解出来了,但是花的时间很长的。
每个汉字代表一个数字(0-9),并且不会相同,要让这个等式成立哈。
分析如下:
1,"三" 为 1。
因为两个4位数相加(按最大考虑9999+9999)也不到达20000,用学术性的说法,加法进位都是1。
2,"羊"为 0。
"三"已经为1,那么“三羊献瑞”这个数的范围就是1000—1999;
“祥瑞生辉”这个数范围就是1000-9999。但是要实现两个数相加大于10000的情况,那么“祥瑞生辉”这个数的范围只能是8999-9999之间。
两个数的最大值相加,那么"三羊生瑞气"的范围就是10000-11998,"羊"的取值是0或者1,别忘了"三"已经为1了,那么"羊"只能为0,两个字代表不同的数。
3,"祥"为 9。
"羊"为0,第三位的"瑞"+"羊"没有等于"瑞",而等于的"生",是因为第二位数("生"+"献">10)有进位1。可以得出"生"-"瑞"=1,那么"瑞"
"瑞"就是进位,那么"祥"为9
4.剩下字的范围:瑞(2-7),生(3-8),献(2-8),辉(2-8),气(2-8)
接着就可以进行编程,爆破其他数字了。当然也可以继续一步一步逻辑,假设性代入。但是确定也比较多了,编程爆破更快。
上python:
#encoding:utf-8
# 祥c 瑞d[2] 生d[1] 辉d[0]
# + 三a 羊b 献d[4] 瑞d[2]
#________________
# 三a 羊b生d[1] 瑞d[2] 气d[3]
importrandom
#随机0-9的数组
defshuzu():
b1 = []
whileTrue:
j=random.randint(2,8)
ifjnot inb1 :
b1.append(j)
ifb1.__len__()==5:
break
returnb1
#
defshuzu1():
whileTrue:
b2=shuzu()
#"生"-"瑞"=1,瑞(2-7),生(3-8)
if(b2[1]-b2[2]==1andb2[1]!=2andb2[2]!=8):
break
printb2
returnb2
whileTrue:
#d生成随机的数组
d=shuzu1()
# 祥c 瑞d[2] 生d[1] 辉d[0]
xrsh=9000+d[2]*100+d[1]*10+d[]
#三a 羊b 献d[4] 瑞d[2]
syxr=1000+d[4]*10+d[2]
#三a 羊b生d[1] 瑞d[2] 气d[3]
sxsrq=10000+d[1]*100+d[2]*10+d[3]
#如果等式成立,就终止循环,输出数字
ifsxsrq == xrsh+syxr:
print"________________"
print" 祥瑞生辉:",xrsh
print" 三羊献瑞:",syxr
print"三羊生瑞气:",sxsrq
break
程序运行结果如下:
喜欢就关注下吧
领取专属 10元无门槛券
私享最新 技术干货