题目描述:
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
-
输入:
-
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
-
输出:
-
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
-
样例输入:
-
11 B A 5 @ W
-
样例输出:
-
AAAAAAAAA ABBBBBBBBBA ABAAAAAAABA ABABBBBBABA ABABAAABABA ABABABABABA ABABAAABABA ABABBBBBABA ABAAAAAAABA ABBBBBBBBBA AAAAAAAAA @@@ @WWW@ @W@W@ @WWW@ @@@
package com.zhanghaipeng.jobdu;
import java.io.IOException;
import java.util.Scanner;
public class JD1432 {
//找规律,从中间点开始输出
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
String ins = sc.next();
String outs = sc.next();
char in = ins.charAt(0);
char out = outs.charAt(0);
char[][] bufferOutput = new char[n+1][n+1];
//a为边长,b为当前圈数
int a,b;
for(a = 1,b =1; a <= n;a+=2,b +=1){
//获取中间坐标
int x = (n+1)/2;
int y = (n+1)/2;
//当前圈左上角坐标
x = x-b+1;
y = y-b+1;
char s = b % 2 == 1 ? in : out;
bufferOutput[x][y] = s;
//向外输出图形
for(int c = 1; c <= a; c++){
//输出列
bufferOutput[x+c-1][y] = s;
bufferOutput[x+c-1][y+a-1] = s;
//输出行
bufferOutput[x][y+c-1] = s;
bufferOutput[x+a-1][y+c-1] = s;
}
}
if(n != 1){
bufferOutput[1][1] = ' ';
bufferOutput[1][n] = ' ';
bufferOutput[n][1] = ' ';
bufferOutput[n][n] = ' ';
}
StringBuffer str = new StringBuffer();
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
str.append(bufferOutput[i][j]);
}
str.append("\n");
}
System.out.println(str);
}
}
}