【PAT甲级 U形打印】1031 Hello World for U (20 分) Java版 6/6通过

题目

一开始没看懂“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

【PAT甲级 U形打印】1031 Hello World for U (20 分) Java版 6/6通过

题解

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

【PAT甲级 U形打印】1031 Hello World for U (20 分) Java版 6/6通过

上一篇:A1算法性能评价


下一篇:CAD当前选择实体发生变化调用事件(com接口)