首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。