您的位置:首页 > 其它

ZOJ1009 Enigma

2010-10-01 12:01 288 查看
#include<iostream>

using namespace std;
#include<string>

int rotor[3][26];
int rround[3];
int m;

void nextstep()
{
rround[0]++;
if(rround[0]%m==0){
rround[1]++;
rround[0]=0;
if(rround[1]%m==0){
rround[2]++;
rround[2]%=m;
rround[1]=0;
}
}
}

void resolve(char ch)
{
int num=ch-'A';

for(int i=2;i>=0;i--){
num+=rotor[i][(num-rround[i]+m)%m];
num=(num+m)%m;
}

cout<<(char)('a'+num);
}

int main()
{
int num;
string curline;
int i,j;
int ncase=1;

while(cin>>m && m!=0){
//完成对三个rotor开始状态的初始化
memset(rotor,0,sizeof(rotor));
for(i=0;i<3;i++){
cin>>curline;
for(j=0;j<m;j++){
rotor[i][curline[j]-'A']=j-(curline[j]-'A');
}
}

//特别注意下面cout<<"Enigma "<<ncase++<<":"<<endl;一定要放在此处
//不可以放到下面的for循环中
if(ncase!=1)
cout<<endl;
cin>>num;
cout<<"Enigma "<<ncase++<<":"<<endl;

for(i=1;i<=num;i++){
memset(rround,0,sizeof(rround));

cin>>curline;
for(j=0;curline[j]!='/0';j++){
resolve(curline[j]);
nextstep();
}
cout<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: