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
}

posted on 2008-10-24 14:52  Phinecos(洞庭散人)  阅读(695)  评论(1编辑  收藏  举报

导航