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

淺唱寂寞╮ 提交于 2019-11-25 19:46:14

题目

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!