1 条题解
-
0
C :
#include<stdio.h> #include<string.h> int main(void) { int k1,k2,k3; while(scanf("%d%d%d",&k1,&k2,&k3)!=EOF) { int i,j,i1=0,i2=0,i3=0,i11=0,i22=0,i33=0,p[100005]; char s[100005],s1[100005],s2[100005],s3[100005],s11[100005],s22[100005],s33[100005]; scanf("%s",s); for(i=0;i<strlen(s);i++) if(s[i]>='a'&&s[i]<='i') { s1[i1++]=s[i]; p[i]=1; } else if(s[i]>='j'&&s[i]<='r') { s2[i2++]=s[i]; p[i]=2; } else if((s[i]>='s'&&s[i]<='z')||s[i]=='_') { s3[i3++]=s[i]; p[i]=3; } if(i1!=0) k1=k1%i1; if(i2!=0) k2=k2%i2; if(i3!=0) k3=k3%i3; for(i=0;i<i1;i++) s11[i]=s1[(i-k1+i1)%i1]; for(i=0;i<i2;i++) s22[i]=s2[(i-k2+i2)%i2]; for(i=0;i<i3;i++) s33[i]=s3[(i-k3+i3)%i3]; for(i=0;i<strlen(s);i++) if(p[i]==1) s[i]=s11[i11++]; else if(p[i]==2) s[i]=s22[i22++]; else if(p[i]==3) s[i]=s33[i33++]; printf("%s\n",s); } return 0; }
C++ :
//364K 32MS #include<stdio.h> #include<string.h> #define M 107 char ans[3][M],ss[3][M],s[M];//ans存的是加密字符串,ss存的是加密后 int p[3]; void change(char s1[M],int l,int k,char s2[M])//转换后的位置 { for(int i=0;i<l;i++) s2[(i+k)%l]=s1[i]; } int main() { int k1,k2,k3; //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while(scanf("%d%d%d",&k1,&k2,&k3)!=EOF) { scanf("%s",s); int len=strlen(s),l1=0,l2=0,l3=0; for(int i=0;i<len;i++) { if(s[i]>='a'&&s[i]<='i'){p[i]=1;ans[1][l1++]=s[i];} else if(s[i]>='j'&&s[i]<='r'){p[i]=2;ans[2][l2++]=s[i];} else{p[i]=3;ans[3][l3++]=s[i];} } if(l1)k1%=l1; if(l2)k2%=l2; if(l3)k3%=l3; change(ans[1],l1,k1,ss[1]); change(ans[2],l2,k2,ss[2]); change(ans[3],l3,k3,ss[3]); l1=l2=l3=0; for(int i=0;i<len;i++) if(p[i]==1){printf("%c",ss[1][l1++]);} else if(p[i]==2){printf("%c",ss[2][l2++]);} else if(p[i]==3){printf("%c",ss[3][l3++]);} printf("\n"); } return 0; }
- 1
信息
- ID
- 993
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者