buu 达芬奇密码

题目:达芬奇一直是一个有争议的画家,科学家。。。小明为了研究他,从网上找到了名画蒙娜丽莎,一天深夜,小明突然从蒙娜丽莎背后的天空中看到了一串神秘的数字。顺带告诉小明达芬奇家窗台上有一串数字是关键。小明千里迢迢找到了这串数字,请将这个送分题做出来,亲,包邮哦(答案是一串32位十进制数字) 注意:得到的 flag 请包上 flag{} 提交

达芬奇隐藏在蒙娜丽莎中的数字列:1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711 
记录在达芬奇窗台口的神秘数字串:36968853882116725547342176952286

首先,审计题目,好吧,我什么都不知道,看不懂这东西在说啥,于是,我们去查达芬奇密码,发现这东西是本书,而在书中,疑案就是斐波纳契数列,于是,我输出了斐波纳契数列:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a[100];
    a[0]=a[1]=1;
    for(int i=2;i<100;i++){
        a[i]=a[i-1]+a[i-2];
        cout<<a[i]<<" ";
    }
    return 0;     
}

 

于是,接下来,我们将数列与达芬奇的密码进行比对:

1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309

可以明显发现,密码只是在数列的基础上变换了位置,比如说第0个1对应的就是1,第1个233对应的是第13个,第3个对应的是第4个......

于是,我们可以知道神秘数字串其实也是按照上面的规律进行变换:

借鉴大佬的代码:

#主要思路是遍历fakefibbo,然后找出对应哪一位,如fb中第二个数对应rb中第五个
#然后cipher对应fakebibbo,因此cipher中第二个数对应flag第五个数
#因此有reslut[4]=cipher[1],依次类推
realfibbo = '1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309'
fakefibbo = '1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711'
cipher = '36968853882116725547342176952286'
realfibbo = realfibbo.split(' ')
fakefibbo = fakefibbo.split(' ')
result = ['a']*32
for i in range(len(cipher)):
#这里要考虑到第二个1(fb[24])寻找的时候,会找到1123中第一个数,也就是index=0,而我们希望他找到第二个数,也就是index=1
    if(i == 24):
        index = 1
    else:
        index = realfibbo.index(fakefibbo[i])
    result[index] = cipher[i]
for i in result:
    print(i,end='')
最终得到 flag{37995588256861228614165223347687}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值