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