CTF练习解析

实验吧编程-三羊献瑞

2019-04-13  本文已影响3人  追求科技的足球

这个题更像是一个逻辑题,求数值。
1、首先就什么也不想,直接写一个很烂的逻辑。。。自己都嫌弃

a = 0 #祥
b = 0 #瑞
c = 0 #生
d = 0 #辉=0
e = 0 #三
f = 0 #羊
g = 0 #献
h = 0 #气

#祥瑞生辉 abcd 
#三羊献瑞 efgb 
#三羊生瑞气 efcbh 

for a in range(10):
    if(a!=0):
        for b in range(10):
            if(b!=a):
                for c in range(10):
                    if(a!=c and b!=c):
                        for d in range(10):
                            if(a!=d and b!=d and c!=d):
                                for e in range(10):
                                    if(e!=0 and a!=e and b!=e and c!=e and d!=e):
                                        for f in range(10):
                                            if(a!=f and b!=f and c!=f and d!=f and e!=f):
                                                for g in range(10):
                                                    if(a!=g and b!=g and c!=g and d!=g and e!=g and f!=g ):
                                                        for h in range(10):
                                                            if( a!=h and b!=h and c!=h and d!=h and e!=h and f!=h and g!=h):
                                                                if(a*1000 + b*100 + c*10 +d + e*1000 + f*100 + g*10 + b == e*10000 + f*1000 + c*100 + b*10 + h):
                                                                    print("a=:"+str(a))
                                                                    print("b=:"+str(b))
                                                                    print("c=:"+str(c))
                                                                    print("d=:"+str(d))
                                                                    print("e=:"+str(e))
                                                                    print("f=:"+str(f))
                                                                    print("g=:"+str(g))
                                                                    print("h=:"+str(h))





2、仔细想想逻辑,不使用计算机,其实挺有意思的。
首先原则是都不相同的数字。
(1)四位数相加得五位数,五位数的首位肯定是1,即三=1。
(2)既然三=1,那么为了使得四位相加得到五位,必然祥=9。
(3)呢么9+1=10,则只能羊=0。
(4)瑞+0+进位=生,则进位肯定为1,则后面必然:
生+献+进位>10=瑞+10,且瑞+1=生。
(5)最后个位辉+瑞=气(+10)
(6)因此最后有这三个式子,且这几个数字在2-8之间。

生+献+进位>10=瑞+10
瑞+1=生
辉+瑞=气(+10)

(7)可以假设一下:
①若生=8,则瑞=7,则献只能等于8,pass
②若生=7,则瑞=6,献只能等于8,且辉+瑞>10,则辉=5,但是这样的话气=1,pass
③若生=6,则瑞=5,献只能等于8,且辉+瑞>10,则辉可以等于7,气=2。通过!

3、作为学计算机的,,,还是要改进一下算法是吧,还是再写一个好一点的。
首先1、9、0很容易确定,其余可以随机数值满足上面的等式,降低复杂度。
4、如果想到其他的算法再补。。。

上一篇下一篇

猜你喜欢

热点阅读