天天看點

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();
        }
    }