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();
}
}
}
}
}