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,如需转载请自行联系原作者
目录
相关文章
|
编解码 监控 测试技术
如何优化OBS的推流设置以提高直播质量
【10月更文挑战第7天】如何优化OBS的推流设置以提高直播质量
|
机器学习/深度学习 运维 数据挖掘
scikit-learn 1.0 版本重要新特性一览
scikit-learn 1.0 版本重要新特性一览
230 0
|
C语言
c语言猜数游戏
c语言猜数游戏
286 0
|
SQL 关系型数据库 MySQL
⑩⑨【Tool】MySQL常用客户端管理工具:mysql、mysqladmin、mysqlbinlog、mysqlshow、mysqldump、mysqlimport、source
⑩⑨【Tool】MySQL常用客户端管理工具:mysql、mysqladmin、mysqlbinlog、mysqlshow、mysqldump、mysqlimport、source
197 0
|
存储 关系型数据库 MySQL
为什么不建议把数据库部署在docker容器内?
为什么不建议把数据库部署在docker容器内?
828 0
|
移动开发 JavaScript UED
用 customRef 做一个防抖函数,支持 element 等UI库
这几天学习Vue的官网,看到 customRef 提供了一个例子,研究半天发现这是一个防抖函数,觉得挺好,于是把这个例子扩展了一下,可以用于表单子控件和查询子控件。
273 0
|
Android开发
Android MediaPlayer播放音频与视频
播放音频 首先创建出一个MediaPlayer对象 MediaPlayer mMediaPlayer = new MediaPlayer(); 设置声音源 public static final String FILENAME = "deserve.
1377 0
下一篇
开通oss服务