转载

[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();
                }
            }
        }
    }
}
[Java] 1031. Hello World for U (20)-PAT甲级

(随着网站访问量的激增,服务器配置只得一再升级以维持网站不“404 Not Found”,所以网站的维护费用也在不断上涨……(目前的阿里云服务器ECS+云数据库RDS+域名购买+七牛云的费用是2200元/年),为了能不放弃该网站,所以我又把打赏链接放上来啦~所有打赏金额都会被记账并投入博客维护中,感谢厚爱,多多关照~)

原文  https://www.liuchuo.net/archives/5002
正文到此结束
Loading...