// C++Exercise.cpp : 定义控制台应用程序的入口点。
//
#include<iostream>
#include<string>
#include<stack>
#include<map>
#include<vector>
using namespace std;
string getResult(string arr1, string arr2, string arr3,
vector<int> dis1, vector<int> dis2, vector<int> dis3,string demo){
int cur1 = 0, cur2 = 0, cur3 = 0;
string res;
for (int index = 0; index < demo.size(); index++){
char aim = demo[index];
int i;
int len = arr1.size();
for (i = 0; i < len; i++){
if (arr3[i] == aim) break;
}
aim = 'A' + i;
for (i = 0; i < len; i++){
if (arr2[i] == aim) break;
}
aim = 'A' + i;
for (i = 0; i < len; i++){
if (arr1[i] == aim) break;
}
aim = 'a' + i;
res+=aim;
cur1++;
for (i = 0; i < len; i++){
arr1[i] = 'A' + (dis1[(i-cur1+len)%len]+len+i) % len;
}
if (cur1 >= len) cur1 = 0;
if ((index + 1) % len == 0){//因为index是从0开始的
cur2++;
for (i = 0; i < len; i++){
arr2[i] = 'A' + (dis2[(i - cur2 + len) % len] + len+i) % len;
}
if (cur2 >= len) cur2 = 0;
}
if ((index + 1) % (len*len) == 0){
cur3++;
for (i = 0; i < len; i++){
arr3[i] = 'A' + (dis3[(i - cur3 + len) % len] + len+i) % len;
}
if (cur3 >= len) cur3 = 0;
}
}
return res;
}
int main(){
int Case = 0;
int m;
while (cin >> m){
if (m == 0) break;
Case++;
string arr1, arr2,arr3;
vector<int> dis1(m);
vector<int> dis2(m);
vector<int> dis3(m);
int i;
cin >> arr1 >> arr2 >> arr3;
for (i = 0; i < m; i++){
dis1[i] = arr1[i] - ('A'+i);
dis2[i] = arr2[i] - ('A'+i);
dis3[i] = arr3[i] - ('A'+i);
}
int n;
cin >> n;
bool flag = false;
for (int step = 0; step < n; step++){
string s;
cin >> s;
if (!flag){
if (Case > 1) cout << endl;
flag = true;
cout << "Enigma " << Case << ":" << endl;
}
cout << getResult(arr1, arr2, arr3, dis1, dis2, dis3, s) << endl;
}
}
return 0;
}
1009 Enigma
最新推荐文章于 2024-05-19 09:32:32 发布