蓝桥杯—历届试题(打印十字图)
试题 历届试题 打印十字图
资源限制:
时间限制: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 }