本文主要是介绍PAT团队程序设计天梯赛L1-039 古风排版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目要求
题目分析
假设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接收所有行,每次后面用转义字符插入一个换行符,但是这样做就必须保证最后一次不会继续换行。
这篇关于PAT团队程序设计天梯赛L1-039 古风排版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!