wikioi1197 Vigenère密码

来源:互联网 发布:cf网络原因连接失败6 编辑:程序博客网 时间:2024/05/21 09:59
简单找规律的题,仔细研究一下图表即可。
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int a[30][30];char ch,essay[1100];int key[110],st[1100];bool flag[1100];int lk,lst;void init(){    for(int i=1;i<=26;i++)    {        for(int j=1;j<=26;j++)        {            a[i][j]=(i+j-2)%26+1;        }    }}void work(int s){    int kloc=(s-1)%lk+1;    for(int i=1;i<=26;i++)    {        if(a[key[kloc]][i]==st[s])        {            if(flag[s])            {                int t=i+'A'-1;                printf("%c",t);            }            else            {                int t=i+'a'-1;                printf("%c",t);            }            break;        }    }}int main(){    scanf("%s",essay);    lk=strlen(essay);    for(int i=0;i<strlen(essay);i++)    {        if(essay[i]>='A' && essay[i]<='Z')        {            key[i+1]=essay[i]-'A'+1;        }        else        {            key[i+1]=essay[i]-'a'+1;        }    }    memset(essay,NULL,sizeof(essay));    scanf("%s",essay);    lst=strlen(essay);    for(int i=0;i<strlen(essay);i++)    {        if(essay[i]>='A' && essay[i]<='Z')        {            st[i+1]=essay[i]-'A'+1;            flag[i+1]=true;        }        else        {            st[i+1]=essay[i]-'a'+1;        }    }    init();    for(int i=1;i<=lst;i++)    {        work(i);    }    return 0;}

0 0