密码
题目链接: https://www.nowcoder.com/acm/contest/90/K
有两种方法,一种是按照题意,将字符串模拟到二维字符数组中,然后再输出,另一种就是找规律,第一行和最后一行两个字符相隔2*m-2,其余的i行是2*(m-1-i)和2*i交替的规律。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m;
char str[100005];
int main()
{
scanf("%d",&n);
while(n--){
scanf("%d",&m);
scanf("%s",str);
int len = strlen(str);
if(m == 1){
printf("%s\n",str);
continue;
}
for(int i=0;i<m;i++){
int j = i;
int temp = 0;
if(i == 0 || i == m - 1){
while(j < len){
printf("%c",str[j]);
j += 2 * m - 2;
}
}
else{
while(j < len){
printf("%c",str[j]);
if(temp % 2 == 0){
j += 2 * (m - 1 - i);
}
else{
j += 2 * i;
}
temp++;
}
}
}
printf("\n");
}
return 0;
}
查看14道真题和解析