POJ 1107 W's Cipher (模拟解密)

来源:互联网 发布:网络教育大专,自考本科 编辑:程序博客网 时间:2024/05/21 14:44

这是一道简单的模拟题,不过看题的时间长了点,没办法,英语不太好。

题意:

        先是将字母和下划线分为三类a~i,j~r,s~z和‘_’;  然后,独立地交换每组的字母,例如:对于 “_icuo_bfnwhoq_kxert”,

   第一组符号有{i,c,b,f,h,e},位置分别为{2,3,7,8,11,17},假设k1=2;那么第一组符号顺序变为{h,e,i,c,b,f},不过在原字符串中占

       有的位置还是{2,3,7,8,11,17},然后第二组······第三组······

参考代码:

#include<stdio.h>#include<string.h>int main(){    short k1,k2,k3,a[81],b[81],i,l,n,t;    char ch[81],cha[81];    scanf("%d%d%d",&k1,&k2,&k3);    while(k1||k2||k3)    {      scanf("%s",ch);        l=strlen(ch);          n=0;          for (i=0;i<l;i++)             if (ch[i]>='a'&&ch[i]<='i')               {                  a[n]=i;                 n++;               }               for (i=0;i<n;i++)               {                    t=(i+k1)%n;                    b[t]=a[i];               }                 for (i=0;i<n;i++) cha[a[i]]=ch[b[i]];          n=0;          for (i=0;i<l;i++)             if (ch[i]>='j'&&ch[i]<='r')               {                  a[n]=i;                 n++;               }              for (i=0;i<n;i++)               {                  t=(i+k2)%n;                  b[t]=a[i];               }               for (i=0;i<n;i++) cha[a[i]]=ch[b[i]];               //for (i=0;i<n;i++) printf("%d ",a[i]);printf("\n");              //  for (i=0;i<n;i++) printf("%d ",b[i]);printf("\n");          n=0;               for (i=0;i<l;i++)              if ((ch[i]>='s'&&ch[i]<='z')||ch[i]=='_')               {                  a[n]=i;                 n++;               }               for (i=0;i<n;i++)                {                   t=(i+k3)%n;                   b[t]=a[i];               }                 for (i=0;i<n;i++) cha[a[i]]=ch[b[i]];                for (i=0;i<l;i++) printf("%c",cha[i]);          printf("\n");       scanf("%d%d%d",&k1,&k2,&k3);    }  return 0;}     



0 0
原创粉丝点击