ZOJ 1006 Do the Untwist 加密解密 模拟

来源:互联网 发布:smplayer linux 编辑:程序博客网 时间:2024/06/05 20:44

题意:加密、解密

题解:

#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int key;int c2i[1000];char i2c[1000];void init(){    for(int i = 'a'; i <= 'z'; i++)        c2i[i] = i - 'a' + 1;    c2i['_'] = 0;    c2i['.'] = 27;    i2c[0] = '_';    i2c[27] = '.';    for(int i = 1; i <= 26; i++)        i2c[i] = 'a' + i - 1;}int main(){    init();    char ciphertext[100];    int ciphercode[100];    int plaincode[100];    char plaintext[100];    while(~scanf("%d",&key))    {        if(key == 0) break;        scanf("%s",ciphertext);        int len = strlen(ciphertext);        for(int i = 0; i < len; i++)            ciphercode[i] = c2i[ciphertext[i]];        for(int i = 0; i < len; i++)            plaincode[(key*i)%len] = (ciphercode[i] + i) % 28;        for(int i = 0; i < len; i++)            plaintext[i] = i2c[plaincode[i]];        plaintext[len] = '\0';        printf("%s\n", plaintext);    }}


原创粉丝点击