可以一眼看出“三羊”的值为“10”。

如果没看出来也没关系。大概算了下暴力方法时间复杂度是可以接受的,采用数学问题通用解题思路——打表看规律。

for i in range(1000, 10000): 
    for j in range(max(10000-i, 1000), 10000): 
        if j//100 == (i+j)//1000: 
            print(i, j, i+j) 

在光速打出的结果中可以看出

1. "祥瑞生辉" > 8990 ;

2. "三羊" == 10.

如果想要缩小显示出结果的规模,用这种暴力方法编程复杂度很高。

这时想到了另一种思路——列举“三羊献瑞翔西普CTF-三羊献瑞-以夕阳落款气生辉“的所有可能情况。

可是列举八个数字的全排列依然有不小的编程复杂度——

是时候展现真正的“技术”了!

import random 
a=[2,3,4,5,6,7,8,9] 
while 1:
    random.shuffle(a)
    b = 1000 + a[0]*10 + a[1]
    c = a[2]*1000 + a[1]*100 + a[3]*10 + a[4]
    d = 10000 + a[3]*100 + a[1]*10 + a[5]
    if b+c == d:
        print("%d %d %d" % (b, c, d))
        break 

运行时间和代码缩短到了极致。

随机化大法好西普CTF-三羊献瑞-以夕阳落款

Flag:

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

小广告:关于获取西普实验吧所有Writeup请点击这里查看索引

查看所有Flag需要付费,需要获取所有Flag的童鞋请访问这里成为付费用户,可以自助把自己的注册邮箱加入网站白名单,即可免回复看到本站所有Flag

Flag大全地址:所有Flag

PS:本站不是实验吧的官方站点,纯粹是个人博客,收取Flag费用仅是维持服务器费用,做站不易,且行窃珍惜,如果喜欢我的博客,愿意捐赠的,可以扫描下面的二维码

微信二维码:
支付宝二维码: