本题难点就是找所给字符串与目标字符串的联系,或者说”破解密码“。
其实规律就是从左开始,第i个字母向后移动x位,超过z循环,x就是数列1,1,2,3,5,8,(f(n)=f(n-1)+f(n-2))。
只需打个数列表,直接按要求输出每一位即可;
#include<stdio.h>
#include<stdlib.h>
int s[1002];
int main()
{
int i,d;
char a[1002];
s[0]=1;s[1]=1;
for(i=2;i<1002;i++)
s[i]=(s[i-1]+s[i-2])%26;
while(gets(a))
{
d=0;
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='A'&&a[i]<='Z')
{
printf("%c",(a[i]-'A'+s[d++])%26+'A');
}
else
printf("%c",a[i]);
}
printf("\n");
}
return 0;
}