题目
一开始没看懂“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
来源:https://blog.csdn.net/sinat_42483341/article/details/98726890