问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑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();
}
}
}