本题的重点是理解清楚题意并能代码模拟。形式是二战德国密码机,和数据结构、算法联系较少。
#include <stdio.h> #include <string.h> int main(){ ],cryp[]; ,num=,m,n,temp[],tran[][]; &&m){ if(blank) printf("\n"); else blank=; printf("Enigma %d:\n",num++); ;i<;i++){ scanf("%s",rotor); ;j<m;j++){ temp[j] = (int)(rotor[j]-'A')-j; tran[i][(j+temp[j])%m]=temp[j]; } } scanf("%d", &n); int lp0,lp1,lp2,t,len; ;i<n;i++){ lp0=lp1=lp2=; scanf("%s",cryp); len=strlen(cryp); ; j < len; j++){ t = cryp[j] - 'A'; t -= tran[][(t + lp2) % m]; t = (t + m) % m; t -= tran[][(t + lp1) % m]; t = (t + m) % m; t -= tran[][(t + lp0) % m]; t = (t + m) % m; printf("%c", t+'a'); lp0 = (lp0 + m - ) % m; ) % m == ) lp1 = (lp1 + m - ) % m; ) % (m*m) == ) lp2 = (lp2 + m - ) % m; } printf("\n"); } } ; }