这是一道简单的模拟题,不过看题的时间长了点,没办法,英语不太好。
题意:
先是将字母和下划线分为三类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;
}