题目:达芬奇一直是一个有争议的画家,科学家。。。小明为了研究他,从网上找到了名画蒙娜丽莎,一天深夜,小明突然从蒙娜丽莎背后的天空中看到了一串神秘的数字。顺带告诉小明达芬奇家窗台上有一串数字是关键。小明千里迢迢找到了这串数字,请将这个送分题做出来,亲,包邮哦(答案是一串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}