publicstaticvoidmain(String[] args) { Scannerscanner=newScanner(System.in); // 循环输入,虽然没说循环输入,但就是循环输入 while (scanner.hasNext()) { inth= scanner.nextInt(); // 输出行 for (inti=0; i < h; i++) { // 输出列 for (intj=0; j < h + (h - 1) * 2; j++) { if (j < h + (h - 1) * 2 - (h + i * 2)) { System.out.print(" "); } else { System.out.print("*"); } } if (i != h) { System.out.println(); } } } } }
问题 B: Hello World for U
题目
题目描述
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 \(n_1\) characters, then left to right along
the bottom line with \(n_2\)
characters, and finally bottom-up along the vertical line with \(n_3\) characters. And more, we would like U
to be as squared as possible -- that is, it must be satisfied that \(n_1 = n_3 = max\ \{ k\ |\ k\ <=\ n2\ for\ all\
3 <= n_2 <= N \}\) with \(n_1 +
n_2 + n_3 - 2 = N\).
输入
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.
输出
For each test case, print the input string in the shape of U as
specified in the description.
样例输入
1
helloworld!
样例输出
1 2 3 4
h ! e d l l lowor
题解
思路
这道题目的关键在于找到 \(n_1,n_2,n_3\) 之间的关系,根据 \(n1 = n3 = max \{ k\ |\ k <= n2\ for\ all\ 3
<= n2 <= N \},n_1+n_2+n_3=N-2\) 可以得出 \(n_1=n_3=\frac{N+2}{3}\),所以,接下来就很简单了。