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

  • 本来这题我以为是找规律,一直想
  1. 确定行列数与n的关系  行:2*2*n+5 列:2*2*n+5
  2. 确定每行里$和.的关系
  3. 根据图像是个中心对称图形,只要找出四分之一的规律,其他可推导出来
  • 后来我才发现我天真了,然后想用类似广搜的做法,让$和.一层一层包围起来,这种做法让思路变得更简单,实现起来也更便捷
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]='$';
						}
					}
				}
			}
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值