【题目链接】
【题目考点】
1. 二维数组
【解题思路】
将字符串中字符按照题目要求,一行从左向右,一行从右向左,填入二维数组中。再按列遍历二维数组,即可得到加密前的字符串。
列数为2~20,总字符数最大为200。当列数为2时,最多会有100行。数组行数可以设为105,列数设为25。
【题解代码】
解法1:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int row, col;//row:行数 col:列数
char a[105][25], s[205];
cin >> col >> s;
int len = strlen(s), k, i = 1, j = 1;
row = len / col;//行数是总字符数除以列数
for(k = 0; k < len; ++k)//将各个字符填充到二维数组
{
a[i][j] = s[k];//当前填充位置:第i行第j列
if(i % 2 == 1)//奇数行,焦点位置向右移动
{
if(j == col)//如果到一行末尾,移动到下一行
i++;
else
j++;
}
else//偶数行,焦点位置向左移动
{
if(j == 1)//如果到一行的第一个位置,移动到下一行
i++;
else
j--;
}
}
for(j = 1; j <= col; ++j)//先遍历列
for(i = 1; i <= row; ++i)//再遍历行
cout << a[i][j];
return 0;
}