Data7.28打印十字图

问题描述

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

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

输入格式

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

输出格式

  • 对应包围层数的该标志。

样例输入 1

1

样例输出 1

Data7.28打印十字图

样例输入 2

3

样例输出 2

Data7.28打印十字图

提示

  • 请仔细观察样例,尤其要注意句点的数量和输出位置

思路

  • 通过观察图得到层数与行、列的关系式为5 +4*n;图形是一个对称图,设置一个中间值mid来进行打印边和角的运算;
  • 进行图的初始化,将图形均用.代表;
  • 先进行中间十字的打印,十字有行和列,for循环中第一行代码将行定于中间行,改变列的数值进行打印十字的——;for循环中第二行代码定列移行,将列定义为中间列,改变列的数值进行打印十字的|;
  • 进行到边然后到角。(图3-图4)
  • 横竖打印:横:第一行和最后一行的概率都为行前面和后面两位为..;所以行的打印可以定(mid - 2 * (i + 1))行改列,列的范围第3列至(5+4*n)-2列为符号$,最后一横的概率也一样;
  • 边打印:左右两边的概率一样,定列移行;
  • 角打印:都可以根据中间值来进行角的定位。利用中间值和层数的来建立一个关系式,先打印里的,再延伸到外的角。
  • 最后输出用$替换.的图打印输出

Data7.28打印十字图

Data7.28打印十字图

Data7.28打印十字图

Data7.28打印十字图

代码

package data;
import java.util.Scanner;
public class Data728 {
    public static void main(String[] args) {
            Scanner cin = new Scanner(System.in);
            int n = cin.nextInt();//输入打印图层的层数;
            getPic(n);
    }
    public static void getPic(int x)//打印图层的函数
    {
            //一层--9;二层--13,一层一层推进$.   .$;
            int side = 5 + 4 *x;//正方形的长和宽的长度;
            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<= x; 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();

            }

    }

}

Data7.28打印十字图

上一篇:用div绘制笑脸


下一篇:Dart新语法尝试