“之”型路线
字符串“PAYPALISHIRING”的一种“之”字型路线是这样的:
![](https://img2018.cnblogs.com/blog/1170235/201812/1170235-20181229014521778-1771785639.png)
如果一行一行的读写,就是PAHNAPLSIIGYIR。
请写一个函数如下:string convert(string text, int nRows);
当输入convert("PAYPALISHIRING", 3)的时候,返回的结果是PAHNAPLSIIGYIR。
如果你还不了解,我告诉你,这就是一个字符串的转换问题,设置成之字形的路线。
zigzag conversion也就是按"N"字母的样子来重新安排字符串中字符的位置,并合并成一个新的字符串。nRows则表示"N"的高度,也就是每一竖列有nRows个字符。
输入格式:第一行输入一个长度不超过250的字符串text和一个整数nRows,中间空格间隔。
输出格式:输出一行字符串,表示最终结果。
样例输入
ABCDEFG 4
样例输出
AGBFCED
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 #include<cmath>//PAYPALISHIRING 3 6 using namespace std; 7 int main(){ 8 int n,k,f; 9 string s,t[300]; 10 cin >> s >> n; 11 k = -1,f = 0; 12 for(int i = 0;i < s.size();i++){ 13 if(f == 0){ 14 t[++k] += s[i]; 15 if(k >= n - 1){ 16 f = 1; 17 } 18 } 19 else{ 20 if(k <= 0){//!!注意只有一行的情况 21 for(int j = i;j < s.size();j++){ 22 t[k] += s[j]; 23 } 24 break; 25 } 26 else{ 27 t[--k] += s[i]; 28 if(k <= 0){ 29 f = 0; 30 } 31 } 32 } 33 } 34 for(int i = 0;i < n;i++){ 35 cout << t[i]; 36 } 37 cout << endl; 38 return 0; 39 }