ZOJ1009 Enigma

简介:
#include <iostream> 
#include <string> 
using namespace std; 
 
int rotor[3][26];//密码表
int rround[3]; //加权轮转表
int totalLetter; 
 
void nextStep() 
{//密码表轮转
    rround[0]++; 
    if (rround[0]%totalLetter == 0) 
    { 
        rround[1]++; 
        rround[0] = 0; 
        if (rround[1]%totalLetter == 0) 
        { 
            rround[2]++; 
            rround[2] %= totalLetter; 
            rround[1] = 0; 
        } 
    }    
 
void revolve(char ch) 
{//利用密码表解密
    int num,i; 
    num=ch-'A';    
    for(i=2;i>=0;i--) 
    {
        num+=rotor[i][(num-rround[i]+ totalLetter)%totalLetter]; 
        num=(num+totalLetter)%totalLetter; 
    }    
    cout<<(char)('a'+num); 
 
int main() 
{
    string curLine;
    int i,j,nCase;    
    int numCrypt; 
    nCase=1; 
    while(cin>>totalLetter&&totalLetter!=0) 
    { 
        memset(rotor,0,sizeof(rotor)); //密码表清零
        //初始化密码表
        for(i=0;i<3;i++) 
        {
            cin>>curLine;
            for(j=0;j<totalLetter;++j) 
            { 
                rotor[i][curLine[j]-'A']=j-(curLine[j]-'A'); 
            } 
        }     
        if(nCase!=1)
            cout<<endl; 
        cin>>numCrypt;
        cout<<"Enigma "<<nCase++<<":"<<endl; 
        for(i=0;i<numCrypt;i++) 
        { 
            memset(rround,0,sizeof(rround));//加权轮转表清零
            j=0; 
            cin>>curLine;//输入密文
            while(curLine[j]!='\0') 
            { 
                revolve(curLine[j++]);//解密
                nextStep();//密码表轮转   
            } 
            cout<<endl;          
        }        
    } 
    return 0; 
}

复制代码



本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/10/24/1318748.html,如需转载请自行联系原作者
目录
相关文章
|
机器学习/深度学习
POJ 1775 (ZOJ 2358) Sum of Factorials
POJ 1775 (ZOJ 2358) Sum of Factorials
143 0
|
人工智能 BI 应用服务中间件
|
机器学习/深度学习
|
Java 测试技术 C++
HDU 3783 ZOJ
ZOJ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2779    Accepted Submission(s): 1840 Problem Description 读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。
1103 0
|
人工智能 机器学习/深度学习
POJ 1775 (ZOJ 2358) Sum of Factorials
Description John von Neumann, b. Dec. 28, 1903, d. Feb. 8, 1957, was a Hungarian-American mathematician who made important contributions t...
1143 0
|
人工智能 BI JavaScript
POJ 2260(ZOJ 1949) Error Correction 一个水题
Description A boolean matrix has the parity property when each row and each column has an even sum, i.
1164 0