题目大意:
Bob和Alice开始用一种崭新的编码方案。他们选择n个大于0小于等于n的序列a1 ; …; an。他们按照下列规则编码。消息在序列下马书写,所以字符和序列中的数字对齐,消息中的位置i的字符编码成位置ai的字符,整个过程迭代k次。如果消息长度小于n,后面用空格填补。
输入序列和消息,输出编码后的消息
解题思路:
模拟题,顺着来就可以了
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int n,i,k,x,m,t;
int num[300];
char ch[300];
char re[300];
while(scanf("%d",&n)!=EOF&&n)
{
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
num[i]--;
}
while(scanf("%d",&k)!=EOF&&k)
{
getchar();
gets(ch);
if(strlen(ch)<n)
{
for(i=strlen(ch);i<n;i++)
{
ch[i]=' ';
}
}
for(i=0;i<n;i++)
{
m=1;
t=num[i];
while(i!=t)
{
t=num[t];
m++;
}
x=k%m;t=i;
while(x)
{
t=num[t];
x--;
}
re[t]=ch[i];
}
for(i=0;i<n;i++)
{
printf("%c",re[i]);
}
printf("\n");
}
printf("\n");
}
return 0;
}