一、箱子之形摆放
题目描述:
要求将一批箱子按从上到下以‘之’字形的顺序摆放在宽度为 n 的空地上,输出箱子的摆放位置,例如:箱子ABCDEFG,空地宽为3,摆放效果如下图:
则输出结果为:
AFG
BE
CD
输入:
一行字符串,通过空格分割两部分,前面str部分表示箱子的字符串由数字或字母组成,后面部分是表示宽度的数字n,如下:
ABCDEFG 3
输出:
AFG
BE
CD
注:最后一行不得输出额外的空行
str只包含数字和数字,1<=len(str)<=1000,1<=n<=1000。
解题思路:
- 本题不难,主要的技巧点在于处理奇数列和偶数列的时候,正序和倒序的问题,这个要画图才能理解
- 比如在第一列,第0个字符A,index是0,第二列,第一个字符D,index=(n-1- i%n) = 3,具体见下面的代码
在这里插入代码片
下面是代码:
// 解题思路:
// 本题不难,主要的技巧点在于处理奇数列和偶数列的时候,正序和倒序的问题,这个要画图才能理解
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String[] strings = line.split(" ");
int n = Integer.parseInt(strings[1]);
//map key用来存放每一行的下标,value对应的字符串
Map<Integer, String> map = new HashMap<>();
String letterStr = strings[0];
for (int i = 0; i < letterStr.length(); i++) {
int columnIdx = i/n;
//如果是偶数列,那么是正序,奇数列是倒序
int index;
if (columnIdx % 2 == 0) {
//索引正序
index = i % n;
}else {
//如果是奇数列,那么是倒序
index = n - 1 - i % n;
}
String str = map.getOrDefault(index, "");
String val = str + letterStr.charAt(i);
map.put(index, val);
}
for (int key : map.keySet()) {
System.out.println(map.get(key));
}
}
}