每个汉字代表一个数字(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
import random
#随机0-9的数组
def shuzu():
b1 = []
while True:
j=random.randint(2,8)
if j not in b1 :
b1.append(j)
if b1.__len__()==5:
break
return b1
def shuzu1():
while True :
b2=shuzu()
#"生"-"瑞"=1,瑞(2-7),生(3-8)
if (b2[1]-b2[2]==1 and b2[1]!=2 and b2[2]!=8):
break
print b2
return b2
while True:
#d生成随机的数组
d=shuzu1()
# 祥c 瑞d[2] 生d[1] 辉d[0]
xrsh=9000+d[2]*100+d[1]*10+d[0]
#三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]
#如果等式成立,就终止循环,输出数字
if sxsrq == xrsh+syxr:
print "________________"
print " 祥瑞生辉:",xrsh
print " 三羊献瑞:",syxr
print "三羊生瑞气:",sxsrq
break
程序运行结果如下:
领取专属 10元无门槛券
私享最新 技术干货