0分求调
查看原帖
0分求调
1088732
GXZJQ楼主2024/4/6 21:40
#include <bits/stdc++.h>
using namespace std;
char str[10000];//记录密文
char ans[1000];//记录明文
int key, line, len, sit, ssit; //用于判断当前字符的位置为奇数还是偶数
int check() {
	if (line == 1 || line == key) {//第一行和最后一行
		return sit + (key - 1) * 2;
	} else {
		if (ssit % 2 == 1) {//奇数位置
			return sit + (key - line) * 2;
		} else {
			return sit + 2 * (line - 1);//偶数位置
		}
	}
}
int main() {
	int i;
	cin >> key;
	cin >> str;
	len = strlen(str);
	for (i = len; i > 0; i--)str[i] = str[i - 1];
	//为了直观一些,统一前挪一位,方便操作
	line = 1;
	sit = 1;
	ssit = 1;
	for (i = 1; i <= len; i++) { //将密码对应在明文上
		ans[sit] = str[i];
		sit = check();
		ssit++;
		if (sit > len) { //超出范围,往回构造
			line++;//到下一行了
			sit = line; //每一行第一个字符的位置恰好与行数的数字一样
			ssit = 1;
		}
	}
	for (i = 1; i <= len; i++)printf("%c", ans[i]);
	return 0;
}

样例已过

2024/4/6 21:40
加载中...