私密日记问题 C语言 OJ
Noder现在在上初中了,日记里面也会出现一些敏感话题,为了防止别人看自己的小秘密,他想对自己的日记进行加密。
他的加密算法如下:日记长度是n,有一个长度为n的整形数组p,里面的数字两两不相同,(1<=i<=n,1<=pi,i<=n)。然后对日记进行m次轮换。
每次轮换是将日记中的第i个字符换到第pi个位置去。
输入的日记长度不会超过n。如果长度没有到n就在后面补上空格到n。
#include <stdio.h>
#include <string.h>
#define N 201
int main(void) {
int len;
scanf("%d", &len);
int p[N] = {0};
for (int i = 1; i <= len; i++) {
scanf("%d", &p[i]);
}
//赋值完成
int m = 0;
while (1) {
char diary[N] = {0};
char after[N] = {0};
scanf("%d", &m);
if (m == 0) break;
scanf("%s", diary);
int l = (int) strlen(diary);
for (int i = strlen(diary); i < len; i++) {
diary[i] = '\x20';
}//补齐
for (int k = 0; k < len; k++) {
after[k] = diary[k];
}//相等
for (int j = m; j > 0; j--) {
for (int i = 1; i <= strlen(diary); i++) {
after[p[i]-1] = diary[i-1];
}
for (int i = 1; i <= strlen(diary); i++) {
diary[i-1] = after[i-1];
}
}
printf("%s\n", diary);
}
return 0;
}
此题目需要注意的地方在于补齐空格。空格的转义字符是\x20。