<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
#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 ;
}
#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 ;
}