Given any string of N (≥5) characters, you are asked to form the characters into the shape of U. For example, helloworld can be printed as:
h d
e l
l r
lowo
That is, the characters must be printed in the original order, starting top-down from the left vertical line with n1
characters, then left to right along the bottom line with n2
characters, and finally bottom-up along the vertical line with n3
characters. And more, we would like U
to be as squared as possible – that is, it must be satisfied that n1 =n3 = max { k | k≤n2 for all 3≤n 2 ≤N } with n1 +n2 +n3 −2=N.
Input Specification:
Each input file contains one test case. Each case contains one string with no less than 5 and no more than 80 characters in a line. The string contains no white space.
Output Specification:
For each test case, print the input string in the shape of U as specified in the description.
Sample Input:
helloworld!
Sample Output:
h !
e d
l l
lowor
题意:
给定一个长度为 N 的字符串,请你将它以 U 形输出。
例如,helloworld 可以输出为:
h d
e l
l r
lowo
也就是说,必须按照原始顺序输出字符,左垂直线自上而下共有 n1 个字符,底部行从左到右共有 n2 个字符,右垂直线自下而上共有 n3 个字符。
另外,必须满足 n1=n3=max{k|k≤n2对于所有3≤n2≤N} 以及 n1+n2+n3−2=N。
对于 helloworld,n1=n2=n3=4。
思路:
找规律即可,左右两侧的数量n1 = n3 = (len + 2)/3 n2=len+2-n1-n3
中间空格数量:n2-2
最后一行定位字母位置:s[n1-i-1]
C++:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int len = s.size();
for( int i = 0 ; i < (len+2)/3-1 ; i++){
cout<<s[i];
for( int j = 0 ; j<len+2-(len+2)/3-(len+2)/3 -2 ; j++) cout<<" ";
cout<<s[len-i-1]<<endl;
}
for(int i = 0 ;i<len+2-(len+2)/3-(len+2)/3 ; i++){
cout<<s[(len+2)/3+i-1];
}
return 0;
}