蓝桥杯—历届试题(打印十字图)

试题 历届试题 打印十字图

资源限制:

时间限制:1.0s   内存限制:256.0MB

问题描述:

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

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

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

输入格式:

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

输出格式:

对应包围层数的该标志。

样例输入1:

1

样例输出1:

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

样例输入2:

3

样例输出2:

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

提示

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


思路:

  首先看到题目,卧槽,这什么鬼图,哪里有十字形的徽标。傻逼一样看着题目,看着眼睛都花了。冷静下来想到可能是字体或者大小啥的原因导致看不清楚图片形状。然后做出解这个题最重要的一步:复制到记事本当中,然后修改字体。

这样看是不是就可以清楚的看出来规则了。然后就是找不同,找相同了。

相同点:中间的一个十字

不同点(找规律的点):外面一层一层的增加。

 1 package daily_practice;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Main{
 6     public static void main(String args[]) {
 7         Scanner scan = new Scanner(System.in);
 8         int n = scan.nextInt();
 9         scan.close();
10         char[][] map = new char[5+4*n][5+4*n];
11         
12         for(int i = (5+4*n)/2 - 2; i <= (5+4*n)/2 + 2; i++) {                //输入图像中级的+字
13             for(int j = (5+4*n)/2 - 2; j <= (5+4*n)/2 + 2; j++) {
14                 if(i == (5+4*n)/2 || j == (5+4*n)/2) map[i][j] = '$';
15             }
16         }
17         
18         for(int cen = 1; cen <= n; cen++) {    
19             for(int i = 0; i < 5+4*n; i++) {                //因为输出图形完全对称,So只需要数组的行,就可以用杭来表示列
20                     if(i>cen*2 && i < 4+4*n - cen*2 ) {            //输出part1
21                         map[i][(cen-1)*2] = '$';
22                         map[i][(4+4*n) - (cen-1)*2] = '$';
23                         map[(cen-1)*2][i] = '$';
24                         map[(4+4*n) - (cen-1)*2][i] = '$';
25                     }
26                     if(i == cen*2) {                            //输出part2
27                         for(int m = 0; m < 3; m++) {
28                             map[i][m+(cen-1)*2] = '$';
29                             map[m+(cen-1)*2][i] = '$';
30                             map[i][(4+4*n) - (m+(cen-1)*2)] = '$';
31                             map[(4+4*n) - (m+(cen-1)*2)][i] = '$';
32                         }
33                     }
34                     if(i == 4+4*n - cen*2) {                    //输出part3
35                         for(int m = 0; m < 3; m++) {
36                             map[i][i+m] = '$';
37                             map[i+m][i] = '$';
38                             map[i][(cen-1)*2 + m] = '$';
39                             map[(cen-1)*2 + m][i] = '$';
40                         }
41                     }
42             }
43         }
44         //输出地图
45         for(int i = 0; i < 5+4*n; i++) {
46             for(int j = 0; j < 5+4*n; j++) {
47                 if(map[i][j] == '$') System.out.print(map[i][j]);
48                 else System.out.print(".");
49             }
50             System.out.println();
51         }
52     }
53 }

猜你喜欢

转载自www.cnblogs.com/polygon-live/p/12499804.html