输入格式:
一个正整数 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);
}
}