#3题目大意:给定一个字符串(好像全是大写字母)和一个奇数(数列数),然后将其列输出。
eg1: PRIDEANDPREJUDICE 3
输出为:PDNRUCIAPJIREDEDE
eg2: PDNRUCIAPJIREDEDE 5
输出为:PAECIDUERIDPDRNJE
//直接先将字符按顺序存入二维数组,后面按规律再读出来
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string s;
int number;
while(cin >> s >> number)
{
int col = s.size()/number + 1;
vector<vector<char>> memo(col, vector<char>(number, '0'));
int k = 0;
while(k < s.size())
{
for(int i = 0; i < col; i++)
for(int j = 0; j < number; j++)
{
memo[i][j] = s[k++];
}
}
//先遍历奇数列,然后再反向遍历偶数列
string res = "";
int p = 0;
while(p < number)
{
if(p%2 == 0)
{
for(int i = 0; i < col; i++)
{
if((memo[i][p] >= 'A') && (memo[i][p] <= 'Z'))
{
res += memo[i][p];
}
}
}
p++;
}
int q = number;
while(q > 0)
{
if(q%2 == 1)
{
for(int i = 0; i < col; i++)
{
if((memo[i][q] >= 'A') && (memo[i][q] <= 'Z'))
{
res += memo[i][q];
}
}
}
q--;
}
cout << res << endl;
}
return 0;
}
//双指针,存的时候按对应的规律进行放
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string s;
int number;
while(cin >> s >> number)
{
vector<vector<char>> memo(100, vector<char>(number, '0'));
//左右指针
int left = 0, right = number-1;
int k = 0;
for(int index = 0; index < s.size(); )
{
if(left == right)
{
memo[k++][left] = s[index++];
left = 0;
right = number-1;
}
else
{
memo[k][left++] = s[index++];
memo[k][right--] = s[index++];
k++;
}
}
/*
for(int i = 0; i < memo.size(); i++)
{
for(int j = 0; j < memo[0].size(); j++)
{
cout << memo[i][j] << " ";
}
cout << endl;
}
*/
//按列输出字符
string res = "";
int col = 0;
while(col < number)
{
for(int i = 0; i < 100; i++)
{
if((memo[i][col] >= 'A') && (memo[i][col] <= 'Z'))
{
res += memo[i][col];
}
}
col++;
}
cout << res << endl;
}
return 0;
}