码迷,mamicode.com
首页 > 其他好文 > 详细

1009 Enigma

时间:2014-10-12 18:03:58      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   for   数据   sp   div   

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

 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         else
11             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

标签:style   blog   color   io   ar   for   数据   sp   div   

原文地址:http://www.cnblogs.com/ycaxgjd/p/4020540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!