题目描述
1031 Hello World for U (20分)
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≤n2 ≤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
求解思路
这是一道模拟题,抓住规律即可!
代码实现(AC)
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
string s;
void solve()
{
cin>>s;
int len=s.length();
int n1,n2,n3;
n2=(len+2)/3+(len+2)%3;
n1=n3=(len+2-n2)/2;
for(int i=0;i<n1-1;i++)
{
cout<<s[i];
for(int j=0;j<n2-2;j++)
cout<<" ";
cout<<s[len-1-i]<<endl;
}
for(int i=n1-1;i<n1+n2-1;i++)
cout<<s[i];
}
int main()
{
solve();
return 0;
}