本来这题我以为是找规律,一直想
确定行列数与n的关系 行:2*2*n+5 列:2*2*n+5确定每行里$和.的关系根据图像是个中心对称图形,只要找出四分之一的规律,其他可推导出来
后来我才发现我天真了,然后想用类似广搜的做法,让$和.一层一层包围起来,这种做法让思路变得更简单,实现起来也更便捷
import java.util.Scanner;
public class Main {
static int [][]next={{0,1},{1,0},{0,-1},{-1,0},{-1,1},{1,-1},{1,1},{-1,-1}};
public static void main(String []args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int max=4*n+5;
char [][]image=new char[max][max];
for(int i=max/2-2;i<=max/2+2;i++){
for(int j=max/2-2;j<=max/2+2;j++){
if(j==max/2)
image[i][j]='$';
if(i==max/2)
image[i][j]='$';
}
}
for(int i=0;i<n;i++){
getpoint(max,image);
getdollar(max,image);
}
for(int i=0;i<max;i++){
for(int j=0;j<max;j++){
if(image[i][j]!='$'&&image[i][j]!='.')
image[i][j]='.';
System.out.print(image[i][j]);
}
System.out.println();
}
}
public static void getpoint(int max,char[][] image){
for(int i=0;i<max;i++){
for(int j=0;j<max;j++){
if(image[i][j]=='$'){
for(int k=0;k<8;k++){
int tx=i+next[k][0];
int ty=j+next[k][1];
if(image[tx][ty]!='$'){
image[tx][ty]='.';
}
}
}
}
}
}
public static void getdollar(int max,char[][] image){
for(int i=0;i<max;i++){
for(int j=0;j<max;j++){
if(image[i][j]=='.'){
for(int k=0;k<8;k++){
int tx=i+next[k][0];
int ty=j+next[k][1];
if(image[tx][ty]!='.'){
image[tx][ty]='$';
}
}
}
}
}
}
}