题目
有一批箱子(形式为字符串,设为 str),
要求将这批箱子按从上到下以之
字形的顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。
例如:箱子 ABCDEFG,空地宽度为 3,摆放结果如图:
则输出结果为:
AFG
BE
CD
输入
输入一行字符串,通过空格分隔,前面部分为字母或数字组成的字符串 str,表示箱子;
后面部分为数字 n,表示空地的宽度。例如: ABCDEFG 3
输出
箱子摆放结果,如题目示例所示
A F G
B E
C D
示例
输入
ABCDEFG 3
输出
AFG
BE
CD
备注
- 请不要在最后一行输出额外的空行
str
只包含字母和数字,
思路
创建一个二维字符数组来存放箱子,在遍历时,根据当前的行数和列数的奇偶性来决定是从左到右还是从右到左放置箱子。如果当前行数是偶数,则从左到右放置箱子;否则,从右到左放置箱子。
代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next(); // 输入箱子字符串
int n = sc.nextInt(); // 输入空地宽度
int len = str.length();
int row = len / n; // 箱子应该放置的行数
if (len % n != 0) {
row++; // 如果有余数,行数加1
}
char[][] box = new char[row][n]; // 定义二维数组来存放箱子
int index = 0;
for (int i = 0; i < row; i++) {
if (i % 2 == 0) { // 从上到下,从左到右放置箱子
for (int j = 0; j < n && index < len; j++) {
box[i][j] = str.charAt(index++);
}
} else { // 从上到下,从右到左放置箱子
for (int j = n - 1; j >= 0 && index < len; j--) {
box[i][j] = str.charAt(index++);
}
}
}
// 输出结果
StringBuilder sb = new StringBuilder();
for (int j = 0; j < n; j++) {
for (int i = 0; i < row; i++) {
if (box[i][j] != '\0') {
sb.append(box[i][j]);
}
}
if (j != n - 1) { // 不是最后一列,加上换行符
sb.append('\n');
}
}
System.out.print(sb.toString());
}
}