天天看点

date7.28 打印十字图

打印十字图

问题描述

小明为某机构设计了一个十字型的徽标(并非红十字会啊),如图所示

. . $ $ $ $ $ $ $ $ $ $ $ $ $ . .
. . $ . . . . . . . . . . . $ . .
$ $ $ . $ $ $ $ $ $ $ $ $ . $ $ $
$ . . . $ . . . . . . . $ . . . $
$ . $ $ $ . $ $ $ $ $ . $ $ $ . $
$ . $ . . . $ . . . $ . . . $ . $
$ . $ . $ $ $ . $ . $ $ $ . $ . $
$ . $ . $ . . . $ . . . $ . $ . $
$ . $ . $ . $ $ $ $ $ . $ . $ . $
$ . $ . $ . . . $ . . . $ . $ . $
$ . $ . $ $ $ . $ . $ $ $ . $ . $
$ . $ . . . $ . . . $ . . . $ . $
$ . $ $ $ . $ $ $ $ $ . $ $ $ . $
$ . . . $ . . . . . . . $ . . . $
$ $ $ . $ $ $ $ $ $ $ $ $ . $ $ $
. . $ . . . . . . . . . . . $ . .
. . $ $ $ $ $ $ $ $ $ $ $ $ $ . .
           

同时对方也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

输入格式

一个正整数n(n < 30)表示要求打印图形的层数。

输出格式

对应包围层数的该标志

样例输入1

样例输出1

. . $ $ $ $ $ . .
. . $ . . . $ . .
$ $ $ . $ . $ $ $
$ . . . $ . . . $
$ . $ $ $ $ $ . $
$ . . . $ . . . $
$ $ $ . $ . $ $ $
. . $ . . . $ . .
. . $ $ $ $ $ . .
           

样例输入2

样例输出2

. . $ $ $ $ $ $ $ $ $ $ $ $ $ . .
. . $ . . . . . . . . . . . $ . .
$ $ $ . $ $ $ $ $ $ $ $ $ . $ $ $
$ . . . $ . . . . . . . $ . . . $
$ . $ $ $ . $ $ $ $ $ . $ $ $ . $
$ . $ . . . $ . . . $ . . . $ . $
$ . $ . $ $ $ . $ . $ $ $ . $ . $
$ . $ . $ . . . $ . . . $ . $ . $
$ . $ . $ . $ $ $ $ $ . $ . $ . $
$ . $ . $ . . . $ . . . $ . $ . $
$ . $ . $ $ $ . $ . $ $ $ . $ . $
$ . $ . . . $ . . . $ . . . $ . $
$ . $ $ $ . $ $ $ $ $ . $ $ $ . $
$ . . . $ . . . . . . . $ . . . $
$ $ $ . $ $ $ $ $ $ $ $ $ . $ $ $
. . $ . . . . . . . . . . . $ . .
. . $ $ $ $ $ $ $ $ $ $ $ $ $ . .
           

思路

代码

package daily;

import java.util.Scanner;

public class d7_28 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        getPic(n);
    }
    public static void getPic(int a){
        int side = 5 + 4 * a;//正方形长和宽的长度
        int mid = side/2;//中间数据
        char[][] arr=new char[side][side];
        for(int i = 0;i < side;i++) {//初始化图形,图形均为'.'
            for (int j = 0; j < side; j++) {
                arr[i][j] = '.';
            }
        }
        for (int i = mid - 2;i <= mid+2;i++){//打印中心十字
            arr[mid][i]='$';
            arr[i][mid]='$';
        }
        for (int i = 1;i <= a;i++){
            for (int j = mid - 2 * i;j <= mid + 2 * i;j++){
                arr[mid - 2 * (i + 1)][j] = '$';//上边行
                arr[mid + 2 * (i + 1)][j] = '$';//下边行
                arr[j][mid - 2 * (i + 1)] = '$';//左边竖
                arr[j][mid + 2 * (i + 1)] = '$';//右边竖
            }
            //四个转角
            //左上
            arr[mid - 2 * i][mid - 2 * i] = '$';
            arr[mid - 2 * i][mid - 2 * i - 1] = '$';
            arr[mid - 2 * i - 1][mid - 2 * i] = '$';
            //左下
            arr[mid + 2 * i][mid - 2 * i] = '$';
            arr[mid + 2 * i][mid - 2 * i - 1] = '$';
            arr[mid + 2 * i + 1][mid - 2 * i] = '$';
            //右上
            arr[mid - 2 * i][mid + 2 * i] = '$';
            arr[mid - 2 * i][mid + 2 * i + 1] = '$';
            arr[mid - 2 * i - 1][mid + 2 * i] = '$';
            //右下
            arr[mid + 2 * i][mid + 2 * i] = '$';
            arr[mid + 2 * i][mid + 2 * i + 1] = '$';
            arr[mid + 2 * i + 1][mid + 2 * i] = '$';
        }
        for (int i = 0;i < side;i++){
            for (int j = 0;j < side;j++){
                System.out.print(arr[i][j]);
            }
            System.out.println();
        }
    }