题目描述:
要求将一批箱子按从上到下以‘之’字形的顺序摆放在宽度为n的空地上,输出箱子的摆放位置,例如:箱子ABCDEFG,空地宽为3,摆放效果如下图:
则输出结果为:
AFG
BE
CD
输入:
一行字符串,通过空格分割两部分,前面str部分表示箱子的字符串由数字或字母组成,后面部分是表示宽度的数字n,如下:
ABCDEFG 3
输出:
AFG
BE
CD
注:最后一行不得输出额外的空行
str只包含和数字,1<=len(str)<=1000,1<=n<=1000。
package com.lixusheng.study.huaweinowcoder;
import java.util.Scanner;
/**
* 箱子之字形摆放
* 思路:将str按n分为多个小节,每节长为n,每节的标号从0开始,将标号为奇数的节翻转,然后将所有节拼起来形成 str1。
* 那么,第一个字符串就就是 str1[0+3i],0+3i < str.length(), i为自然数
*/
public class Main1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] strs = str.split(" ");
char[] charArr = strs[0].toCharArray();//字符数组
int n = Integer.parseInt(strs[1]);//箱子宽度
StringBuilder stringBuilder1 = new StringBuilder(strs[0]);
//将stringBuilder1的长度 增加到 n的整数倍,用'#'填充
int bc = charArr.length % n;
if (bc != 0) {
for (int i = 0; i < n - bc; i++) {
stringBuilder1.append('#');
}
}
//将奇数节翻转形成reverse
StringBuilder reverse = new StringBuilder();
for (int i = n; i <= stringBuilder1.length(); i = i + n) {
if ((i / n) % 2 == 1) {
reverse.append(stringBuilder1.substring(i - n, i));
} else {
StringBuilder temp = new StringBuilder(stringBuilder1.substring(i - n, i));
reverse.append(temp.reverse());
}
}
charArr = reverse.toString().toCharArray();
//遍历输出每一行
for (int i = 0; i < n; i++) {
StringBuilder temp = new StringBuilder();
for (int j = i; j < charArr.length; j = j + n) {
if (charArr[j] != '#') {
temp.append(charArr[j]);
}
}
System.out.println(temp);
}
}
}