题目
一开始没看懂“as squared as possible
”和那个max不等式到底是什么意思,看了别人的解答才明白:
- 如果n % 3 == 0,n正好被3整除,直接n1 = n2 = n3
- 如果n % 3 == 1,因为n2要比n1大,所以把多出来的那1个给n2
- 如果n % 3 == 2,就把多出来的那2个给n2
题解
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String str = new Scanner(System.in).nextLine();
Spuare s = new Spuare(str);
s.print();
}
}
class Spuare {
String str;
int len;// 总长
int n1;// 左
int n2;// 下
int n3;// 右
// 如果n % 3 == 0,n正好被3整除,直接n1 = n2 = n3
// 如果n % 3 == 1,因为n2要比n1大,所以把多出来的那1个给n2
// 如果n % 3 == 2,就把多出来的那2个给n2
public Spuare(String str) {
this.str = str;
this.len = str.length();
int n = len + 2;
if (n % 3 == 0) {
n1 = n2 = n3 = n / 3;
} else if (n % 3 == 1) {
n1 = n3 = n / 3;
n2 = n1 + 1;
} else {
n1 = n3 = n / 3;
n2 = n1 + 2;
}
}
// 打印
public void printSpace() {
for (int i = 0; i < n2 - 2; i++) {
System.out.print(" ");
}
}
public void print() {
// 侧边
for (int i = 0; i < n1 - 1; i++) {
System.out.print(str.charAt(i));
printSpace();
System.out.println(str.charAt(len - 1 - i));
}
// 底边
for (int i = n1 - 1; i <= len - n1; i++) {
System.out.print(str.charAt(i));
}
}
}
附:各种长度的排列情况,便于理解
o o
ooo
o o
oooo
o o
o o
ooo
o o
o o
oooo
o o
o o
ooooo
o o
o o
o o
oooo
o o
o o
o o
ooooo
o o
o o
o o
oooooo
o o
o o
o o
o o
ooooo
o o
o o
o o
o o
oooooo
o o
o o
o o
o o
ooooooo