题意:对给定字符串进行解码
思路:观察发现,对每一位字母按斐波那契数列加值进行解码运算
example:
SGC CGGJX GC BMHVQ BGU BCIHNYNBX GNPLV!
112 358…(ASCII 值 + 斐波那契数列值)
THE FLOWS OF MAGIC ARE WHIMSICAL TODAY!S+1=T;
G+1=H;
C+2=E;C+3=F;
G+5=L;
G+8=O;
…
注意:非字母字符不进行解码处理,同时也不记用斐波那契数列
#include <iostream>
#include <cstdio>
using namespace std;
int a[10005];
void calc()//打表计算斐波那契数列
{
a[1] = a[2] = 1;
for(int i = 3; i < 10005; i++)
{
a[i] = a[i-1] + a[i-2];
while(a[i] > 26)//字母序以26为周期
a[i] -= 26;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("2672in.txt","r",stdin);
#endif
calc();
char c;
int i = 1;
while( ~scanf("%c", &c) )
{
if(c == '\n')
i = 1;
if( c > 64 && c < 92 )
{
c += a[i];//对字母字符进行解码
while( c >= 91 )
c -= 26;//如果超出字母范围,则减一个周期(26)
i++;
}
cout<<c;
}
return 0;
}