PAT Advanced 1031 Hello World for U (20 分)

时间:2021-07-08 18:46:45

Given any string of N (≥) 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 | kn2​​ for all 3 } 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



#include <iostream>
using namespace std;
int main()
{
    /**读题
    n1,n2,n3
    n1=n3=height
    n2=width
    height=max(k|k<=width,3<=width<=N)
    2*height+width-2=N
    尽可能方形
    */
    string s;
    cin>>s;
    int N=s.length(),width,height,left=0,right=N-1;
    for(int i=1;;i++){
        if(3*i-2>N){
            height=i-1;
            width=N+2-2*height;
            break;
        }
    }
    for(int j=0;j<height;j++){
        if(j!=height-1){
            cout<<s[left];
            for(int i=0;i<width-2;i++) cout<<" ";
            cout<<s[right]<<endl;
            left++;right--;
        }else{
            for(int i=left;i<=right;i++){
                cout<<s[i];
            }
        }
    }
    system("pause");
    return 0;
}