打印十字图(蓝桥杯,java)

输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数

输出:
对应包围层数的该标志。

例如:
用户输入:
1
程序应该输出:
在这里插入图片描述
在这里插入图片描述

再例如:
用户输入:
3
程序应该输出:
在这里插入图片描述
在这里插入图片描述
问题分析:
先把所有格打上点;
中间十字架:一半的位移,减去2,加上2,就是十字架;
十字架延伸的大十字架,以及大十字架的延伸直线,通过
水平左边从行减到4的位置开始,列从减2的位置到加2的位置,行减6,递推。
垂直上边从列减2的位置到加2,行减4,减6,把垂直十字架的每行延伸都打完,
如下图:

四个对角线方向的直角,每次行减2,列减2;行减2减1,列减2,得左边;行减2,列减2减1,得右边;

在这里插入图片描述

import java.util.Scanner;

public class Main {

	public static void get(int n) {
		int l = 5+4*n;
		int mid = l/2;
		char[][] res = new char[l][l];
		//先打印出全部得点
		for(int i=0;i<l;i++){
			for(int j=0;j<l;j++){
				res[i][j]='.';
			}
		}
		//打印中间十字架
		for(int i=mid-2;i<=mid+2;i++){
			res[mid][i]='$';
			res[i][mid]='$';
		}
		for(int i=1;i<=n;i++){
			//十字架方向的延伸虚线
			for(int j=mid-2*i;j<=mid+2*i;j++){
				res[mid-2*(i+1)][j]='$';
				res[j][mid-2*(i+1)]='$';
				res[mid+2*(i+1)][j]='$';
				res[j][mid+2*(i+1)]='$';
			}
			//打印对角线上的四个角
			//左上角
			res[mid-2*i][mid-2*i]='$';
			res[mid-2*i-1][mid-2*i]='$';
			res[mid-2*i][mid-2*i-1]='$';
			//右上角
			res[mid+2*i][mid-2*i]='$';
			res[mid+2*i][mid-2*i-1]='$';
			res[mid+2*i+1][mid-2*i]='$';
			//左下角
			res[mid-2*i][mid+2*i]='$';
			res[mid-2*i][mid+2*i+1]='$';
			res[mid-2*i-1][mid+2*i]='$';
			//右下角
			res[mid+2*i][mid+2*i]='$';
			res[mid+2*i][mid+2*i+1]='$';
			res[mid+2*i+1][mid+2*i]='$';
		}
		for(int i=0;i<=l;i++){
			for(int j=0;j<=l;j++){
					System.out.print(res[i][j]);
			}
			System.out.println();
		}
	}
	public static void main(String[] args) {
		Scanner in =new  Scanner(System.in);     
		int n = in.nextInt();
		get(n);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值