题目要求
分析
这种横向拼接的题比较不好直接处理,因为你必须把每一行处理好再打印出来。
不过好在本题是规律题:
我们把每4列切成一个模块,最后补上最后一列就可以。
但是,第1组开头是#,需要先处理一下呢。
后面的各组按照mod3处理:
mod3==0:
“…#.”
“.#.#”
“*.?.”
“.#.#”
“…#.”
mod3==1:
“…#.”
“.#.#”
“#.?.”
“.#.#”
“…#.”
mod3==2:
“…*.”
“.*.*”
“*.?.”
“.*.*”
“…*.”
然后就分别把这一组组的String进行replaceAll()以后,替换掉原有String,再加入StringBuilder里面。
最后如上所言,补上去最后一列就行。
具体的看代码吧~~
AC代码(Java语言描述)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] alphabets = scanner.nextLine().split("");
scanner.close();
String demo1 = "..#.", demo6 = "..*.", demo11 = "..#.";
String demo2 = ".#.#", demo7 = ".*.*", demo12 = ".#.#";
String demo3 = "#.?.", demo8 = "*.?.", demo13 = "*.?.";
String demo4 = ".#.#", demo9 = ".*.*", demo14 = ".#.#";
String demo5 = "..#.", demo10 = "..*.", demo15 = "..#.";
StringBuilder line1 = new StringBuilder(demo1);
StringBuilder line2 = new StringBuilder(demo2);
StringBuilder line3 = new StringBuilder(demo3.replaceAll("\\?", alphabets[0]));
StringBuilder line4 = new StringBuilder(demo4);
StringBuilder line5 = new StringBuilder(demo5);
for (int i = 1; i < alphabets.length; i++) {
String s = alphabets[i];
switch ((i+1) % 3) {
case 0:
line1.append(demo6);
line2.append(demo7);
line3.append(demo8.replaceAll("\\?", s));
line4.append(demo9);
line5.append(demo10);
break;
case 1:
line1.append(demo11);
line2.append(demo12);
line3.append(demo13.replaceAll("\\?", s));
line4.append(demo14);
line5.append(demo15);
break;
default:
line1.append(demo1);
line2.append(demo2);
line3.append(demo3.replaceAll("\\?", s));
line4.append(demo4);
line5.append(demo5);
break;
}
}
line1.append(".");
line2.append(".");
line4.append(".");
line5.append(".");
if (alphabets.length % 3 == 0) {
line3.append("*");
} else {
line3.append("#");
}
System.out.println(line1);
System.out.println(line2);
System.out.println(line3);
System.out.println(line4);
System.out.println(line5);
}
}