蓝桥杯历年试题【打印十字图】

xiaoxiao2021-03-01  16

本来这题我以为是找规律,一直想 确定行列数与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]='$'; } } } } } } }

 

转载请注明原文地址: https://www.6miu.com/read-4050041.html

最新回复(0)