PAT (Advanced Level) Practise 1031
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
思路
根据问题中的描述,可以发现,
n1,n2,n3
存在下列关系:
n1=n3=(N+2)mod 3,n2=(N+2)−n1−n3=(N+2)−2×n1.
编程实现
#include <stdio.h>
#define N 80
void printSpace(int count)
{
int i;
for ( i = 0; i < count; i++ )
putchar(' ');
}
int main(void)
{
int n, n1, n2, point;
char c, input[N];
n = 0;
while ( (c = getchar()) != '\n' )
input[n++] = c;
n1 = (n+2) / 3;
n2 = (n+2) - 2*n1;
for ( point = 0; point < n1-1; point++ ) {
printf("%c", input[point]);
printSpace(n2-2);
printf("%c", input[n-point-1]);
printf("\n");
}
while ( n2-- )
printf("%c", input[point++]);
printf("\n");
return 0;
}