[Java] 1031. Hello World for U (20)-PAT甲级

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

题目大意:用所给字符串按U型输出。n1和n3是左右两条竖线从上到下的字符个数,n2是底部横线从左到右的字符个数。
要求:
1. n1 == n3
2. n2 >= n1
3. n1为在满足上述条件的情况下的最大值

PS:感谢github用户@fs19910227提供的pull request~

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        final char[] chars = reader.readLine().toCharArray();
        final int length = chars.length + 2;
        final int rows = length / 3;
        final int columns = length / 3 + length % 3;
        final char[][] table = new char[rows][columns];
        int index = 0;
        //left
        for (int i = 0; i < rows; i++, index++) {
            table[i][0] = chars[index];
        }
        //bottom
        for (int i = 1; i < columns - 1; i++, index++) {
            table[rows - 1][i] = chars[index];
        }
        //right
        for (int i = rows - 1; i >= 0; i--, index++) {
            table[i][columns - 1] = chars[index];
        }
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                char c = table[i][j] == 0 ? ' ' : table[i][j];
                System.out.printf("%c", c);
                if (j == columns - 1) {
                    System.out.println();
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/liuchuo/article/details/81436761