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 | k≤n2 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
题解:
注意n1,n2,n3的大小关系,n1=n2<=n2(n1尽可能的大)
len=strlen(n)+2
n1=len/3;
n2=len/3+len%3;
n3=len/3;
#include<bits/stdc++.h> using namespace std; const int maxn=110; int main(){ char s[maxn],u[maxn][maxn]; scanf("%s",s); int len=strlen(s)+2; int n1,n2,n3; n1=len/3; n2=len/3+len%3; n3=len/3; int index=0; fill(u[0],u[0]+maxn*maxn,' '); for(int i=0;i<n1;i++){ u[i][0]=s[index++]; } for(int i=1;i<n2-1;i++){ u[n1-1][i]=s[index++]; } for(int i=0;i<n3;i++){ u[n3-i-1][n2-1]=s[index++]; } for(int i=0;i<n1;i++){ for(int j=0;j<n2;j++){ printf("%c",u[i][j]); } printf(" "); } return 0; }