蓝桥杯-打印十字形

  • 题目

题目标题:打印十字图

小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)

                 $$$$$$$$$$$$$
                 $           $
               $$$ $$$$$$$$$ $$$
               $   $       $   $
               $ $$$ $$$$$ $$$ $
               $ $   $   $   $ $
               $ $ $$$ $ $$$ $ $
               $ $ $   $   $ $ $
               $ $ $ $$$$$ $ $ $
               $ $ $   $   $ $ $
               $ $ $$$ $ $$$ $ $
               $ $   $   $   $ $
               $ $$$ $$$$$ $$$ $
               $   $       $   $
               $$$ $$$$$$$$$ $$$
                 $           $
                 $$$$$$$$$$$$$


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

为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。

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

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

例如:
用户输入:
1
程序应该输出:
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..

再例如:
用户输入:
3
程序应该输出:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

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

这里写图片描述

  • 代码
import java.util.Scanner;

public class PrintCross {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int len = 4*n+5;
        int[][] A = new int[len][len];
        //填充外层的花型
        for(int i=1;i<=n;i++) {
            //每层有两行
            //上 与 下
            for(int j=2*i;j1<len-2*i;j++) 
                A[2*i-2][j] = A[len+1-2*i][j] = 1;
            A[2*i-1][2*i] = A[2*i-1][len-2*i-1] = 1;
            A[len-2*i][2*i] = A[len-2*i][len-2*i-1] = 1;
            //接下来写左右就很简单,只要互换XY的坐标即可
            //右 与 左
            for(int j=2*i;j<len-2*i;j++)
                A[j][2*i-2] = A[j][len+1-2*i] = 1;
            A[2*i][2*i-1] = A[len-2*i-1][2*i-1] = 1;
            A[2*i][len-2*i] = A[len-2*i-1][len-2*i] = 1;
        }

        //填充中间的十字
        for(int i=0;i<5;i++) {
            //横向的 
            A[2*n+2][2*n+i] = 1;
            //纵向的
            A[2*n+i][2*n+2] = 1;
        }
        //打印
        for(int i=0;i<len;i++) 
            for(int j=0;j<len;j++)
                System.out.print(A[i][j]==1?'$':'.');
            System.out.println();
    }
}
  • 输出
5
..$$$$$$$$$$$$$$$$$$$$$..
..$...................$..
$$..$$$$$$$$$$$$$$$$$..$$
$...$...............$...$
$.$$..$$$$$$$$$$$$$..$$.$
$.$...$...........$...$.$
$.$.$$..$$$$$$$$$..$$.$.$
$.$.$...$.......$...$.$.$
$.$.$.$$..$$$$$..$$.$.$.$
$.$.$.$...$...$...$.$.$.$
$.$.$.$.$$..$..$$.$.$.$.$
$.$.$.$.$...$...$.$.$.$.$
$.$.$.$.$.$$$$$.$.$.$.$.$
$.$.$.$.$...$...$.$.$.$.$
$.$.$.$.$$..$..$$.$.$.$.$
$.$.$.$...$...$...$.$.$.$
$.$.$.$$..$$$$$..$$.$.$.$
$.$.$...$.......$...$.$.$
$.$.$$..$$$$$$$$$..$$.$.$
$.$...$...........$...$.$
$.$$..$$$$$$$$$$$$$..$$.$
$...$...............$...$
$$..$$$$$$$$$$$$$$$$$..$$
..$...................$..
..$$$$$$$$$$$$$$$$$$$$$..
  • 思考

看到这种题,酒席分析他的规律。显然此题是由一层一层的围成,中间是一个十字,所以不妨就层层填充,最后中间再补上十字,之后输出打印即可。关键是分析出规律,此题还有小窍门,就是说,图是中心对称,当我们把上下填充完后,直接调换位置,就是左右的情况,这里我们就用上了中心对称。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值