打印十字图

问题描述

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

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

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

输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置

卧槽。感觉自己最纠结的就是这种问题,我观察规律,发现一层套着一层。从外向里看,形状都是一样的,自己想过递归,但是我写不出代码来。感觉里面的十字型不规则。想了半天我自己重新观察做的,但是麻烦。
import java.util.*;

public class Main  
{  

    public static void main(String[] arg$)  
    {  
        Scanner sc=new Scanner(System.in);  
        int n=sc.nextInt();
        char m[][]=new char[5+n*4][5+n*4];
        int len=m.length;
        int center=len/2;
        //先把所有的点赋值为'.'
        for(int i=0;i<m.length;i++)
        {
        	for(int k=0;k<m.length;k++)
        	{
        		m[i][k]='.';
        	}
        }
        /*
         * 			 *
         * 			 *
         * 画中间的* * * * *
         * 			 *
         * 			 *
         * 每个图像都有
         */
        for(int i=0;i<=2;i++)
        {
        	m[center][center+i]='$';
        	m[center][center-i]='$';
        	m[center+i][center]='$';
        	m[center-i][center]='$';
        }
        //观察规律画行和列的连续部分
        for(int i=0;i<n;i++)
        {
        	for(int k=2+2*i;k<len-2*(i+1);k++)
        	{
        		m[k][2*i]='$';
        		m[2*i][k]='$';
        		m[len-1-2*i][k]='$';
        		m[k][len-1-2*i]='$';
        	}
        }
        /*观察规律,画对角线和斜对角线*/
        for(int i=1;i<=2*n+1;i++)
        {
        	m[2*i][2*i]='$';
        	m[len-1-2*i][2*i]='$';
        }
        //观察规律修正每个图的折角部分
        for(int i=1;i<=2*n;i=i+2)
        {
        	m[i][i+1]='$';
        	m[i+1][i]='$';
        	m[len-1-i-1][i]='$';
        	m[len-1-i][i+1]='$';
        	m[i][len-1-i-1]='$';
        	m[i+1][len-1-i]='$';
        	m[len-1-i][len-1-i-1]='$';
        	m[len-1-i-1][len-1-i]='$';	
        }
        //输出图像
        for(int i=0;i<m.length;i++)
        {
        	for(int k=0;k<m.length;k++)
        	{
        		System.out.print(m[i][k]);
        	}
        	System.out.println();
        }
      }
 }















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值