- 题目
题目标题:打印十字图
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见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
..$$$$$$$$$$$$$$$$$$$$$..
..$...................$..
$$..$$$$$$$$$$$$$$$$$..$$
$...$...............$...$
$.$$..$$$$$$$$$$$$$..$$.$
$.$...$...........$...$.$
$.$.$$..$$$$$$$$$..$$.$.$
$.$.$...$.......$...$.$.$
$.$.$.$$..$$$$$..$$.$.$.$
$.$.$.$...$...$...$.$.$.$
$.$.$.$.$$..$..$$.$.$.$.$
$.$.$.$.$...$...$.$.$.$.$
$.$.$.$.$.$$$$$.$.$.$.$.$
$.$.$.$.$...$...$.$.$.$.$
$.$.$.$.$$..$..$$.$.$.$.$
$.$.$.$...$...$...$.$.$.$
$.$.$.$$..$$$$$..$$.$.$.$
$.$.$...$.......$...$.$.$
$.$.$$..$$$$$$$$$..$$.$.$
$.$...$...........$...$.$
$.$$..$$$$$$$$$$$$$..$$.$
$...$...............$...$
$$..$$$$$$$$$$$$$$$$$..$$
..$...................$..
..$$$$$$$$$$$$$$$$$$$$$..
- 思考
看到这种题,酒席分析他的规律。显然此题是由一层一层的围成,中间是一个十字,所以不妨就层层填充,最后中间再补上十字,之后输出打印即可。关键是分析出规律,此题还有小窍门,就是说,图是中心对称,当我们把上下填充完后,直接调换位置,就是左右的情况,这里我们就用上了中心对称。