首页 > 代码库 > 1009 Enigma

1009 Enigma

本题的重点是理解清楚题意并能代码模拟。形式是二战德国密码机,和数据结构、算法几乎没有联系。

 1 #include <stdio.h> 2 #include <string.h> 3  4 int main(){ 5     char rotor[30],cryp[1000]; 6     int i,j,blank=0,num=1,m,n,temp[26],tran[3][26]; 7     while(scanf("%d", &m)>=0&&m){ 8         if(blank) 9             printf("\n");10         else11             blank=1;12         printf("Enigma %d:\n",num++);13         for(i=0;i<3;i++){14             scanf("%s",rotor);15             for(j=0;j<m;j++){16                 temp[j] = (int)(rotor[j]-A)-j;17                 tran[i][(j+temp[j])%m]=temp[j];18             }19         }20         scanf("%d", &n);21         int lp0,lp1,lp2,t,len;22         for(i=0;i<n;i++){23             lp0=lp1=lp2=0;24             scanf("%s",cryp);25             len=strlen(cryp);26             for(j = 0; j < len; j++){27                 t = cryp[j] - A;28                 t -= tran[2][(t + lp2) % m];29                 t = (t + m) % m;30                 t -= tran[1][(t + lp1) % m];31                 t = (t + m) % m;32                 t -= tran[0][(t + lp0) % m];33                 t = (t + m) % m;34                 printf("%c", t+a);35                 lp0 = (lp0 + m - 1) % m;36                 if((j+1) % m == 0)37                     lp1 = (lp1 + m - 1) % m;38                 if((j+1) % (m*m) == 0)39                     lp2 = (lp2 + m - 1) % m;40             }41             printf("\n");42         }43     }44     return 0;45 }

 

1009 Enigma