刚开始做这个题一脸懵逼,但是通过观察可以发现一些端倪。
转换的只有大写字符,其他符号(比如“?”,“。”)没有变化
题目给了多组样例,我把解密前称为str1,解密后称为str2.
先打印每个str2[i]-str1[i]的值,貌似可以发现一点迹象.
1 1 2 3 5 8 好像和斐波那契数列有关。。
但只是前一部分,后半部分关系,真的看你推了。
#include<iostream>
#include<string.h>
using namespace std;
char str[1000020];
int f[1000020];
int x;
//int num=0; 去掉注释改为全局,结果WA,一定要改成局部变量,因为有多组test
char a[50]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main(){
f[0]=1;
f[1]=1;
for(int i=2;i<1000020;i++)
f[i]=((f[i-1]%26)+f[i-2]%26)%26;
//cout<<strlen(a);
while(gets(str)!=NULL){
int num=0;
int len=strlen(str);
for(int i=0;i<len;i++){
if(str[i]<'A'||str[i]>'Z'){
cout<<str[i];
}else
{
for(int j=0;j<26;j++){
if(str[i]==a[j]){
x=j;
break;
}
}
x+=f[num];
x=x%26;
cout<<a[x];
num++;
}
}
cout<<endl;
}
return 0;
}
参考http://blog.csdn.net/chudongfang2015/article/details/52692698
^_^带我飞