PAT团队程序设计天梯赛L1-039 古风排版

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38234015/article/details/85792065

题目要求

题目分析

假设num表示每一列的字符个数

Java输出的时候是一行一行输出而不是一列一列的,所以应该求出每一行的字符排列。因为字符串的最后一个字符是在第一列,所以需要提前考虑用空格将字符串填充成为能够整除num的长度。填充的个数是num - string.length() % num,但是应该注意,只有string.length() % num不等于0的时候才需要补充。

如图所示,按照4个一列的方式排列,第一行从后往前排列依次是T、[空格]、a、s、a,但是T应该是第一行最后一个被输出的,是倒排。所以可以考虑使用StringBuffer的insert方法,将取到的字符依次往前放。

每找到一行之后,就使得游标往后移动一位,按照上面的方法继续找。

示例代码

import java.util.Scanner;

public class L1_039 {
	public static void main(String[] args) {
		//接收输入数据
		Scanner input = new Scanner(System.in);
		int num = input.nextInt();
		input.nextLine();
		String str = input.nextLine();
		input.close();
		//填补字符串
		String string = null;
		if(str.length() % num != 0) {
			string = replenishString((num - (str.length() % num)), str);
		} else {
			string = str;
		}
		
		int length = string.length();
//		StringBuffer str_oldStyle = new StringBuffer();
		
		for(int nonius = 0; nonius < num; nonius++) {
			StringBuffer str_line = new StringBuffer();
			for(int i = nonius; i < length; i += num) {
				str_line.insert(0, string.charAt(i));
			}
			System.out.println(str_line);
//			str_oldStyle.append(str_line);
//			str_oldStyle.append("\n");
		}
//		System.out.println(str_oldStyle);
	}
	/**
	 * 
	* @Title: replenishString
	* @Description: 给string字符串后面填补number个空格字符
	* @param number
	* @param string
	* @return 填补后的字符串
	 */
	public static String replenishString(int number, String string) {
		StringBuffer str = new StringBuffer(string);
		for(int i = 0; i < number; i++) {
			str.append(" ");
		}
		return str.toString();
	}
}

说明:之前试图使用一个StringBuffer接收所有行,每次后面用转义字符插入一个换行符,但是这样做就必须保证最后一次不会继续换行。

猜你喜欢

转载自blog.csdn.net/qq_38234015/article/details/85792065