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

這是一道簡單的模擬題,不過看題的時間長了點,沒辦法,英語不太好。

題意:

        先是將字母和下劃線分爲三類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;
}     



發佈了43 篇原創文章 · 獲贊 20 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章