您的位置:首页 > 编程语言 > C语言/C++

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

2014-07-22 13:27 381 查看
这是一道简单的模拟题,不过看题的时间长了点,没办法,英语不太好。

题意:

        先是将字母和下划线分为三类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
=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
=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
=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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 解密