题目描述
给定一个长度为 N 的字符串,请你将它以 U 形输出。
例如,helloworld
可以输出为:
h d
e l
l r
lowo
也就是说,必须按照原始顺序输出字符,左垂直线自上而下共有 $n1$ 个字符,底部行从左到右共有 $n2$ 个字符,右垂直线自下而上共有 $n3$ 个字符。
另外,必须满足$ n1=n3=max (k\space |k≤n2对于所有3≤n2≤N ) $ ,以及 $n1+n2+n3−2=N$。
对于 helloworld
,$n1 = n2 = n3 = 4$。
输入格式
包含一个长度不少于 5 且不超过 80 的字符串,字符串内不含空格。
输出格式
输出转化为 U 形后的图案。
输入样例:
helloworld!
输出样例:
h !
e d
l l
lowor
算法
(复杂度) $O(n^2)$
字符串分成3部分,其中$ n1 = n2 = (str.size() +2) / 3, n3 = (str.size() + 2)/ 3 + (str.size() + 2) mod 3$
C++ 代码
#include<iostream>
using namespace std;
int main(){
string str;
cin>>str;
int len = str.size() + 2;
int plen = len / 3;
int i = 0;
//输出上面 plen - 1 行
for (; i < plen - 1; i ++ ) {
cout<<str[i]<<string(plen - 2 + len % 3, ' ')<<str[str.size() - 1 - i]<<endl;
}
//输出最下面一行
for (int j = 0; j < plen + len % 3; j ++) {
cout<<str[i + j];
}
cout<<endl;
return 0;
}