第四届蓝桥杯预赛:打印十字图


标题:打印十字图

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




    对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
    
    为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。

输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数

输出:
对应包围层数的该标志。

例如:
用户输入:
1
程序应该输出:
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..


再例如:
用户输入:
3
程序应该输出:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..


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


资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。



解答:

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		find(scan.nextInt());
	}

	public static void find(int n) {
		// 确定数组的大小
		int len = 5 + n * 4;
		String[][] arr = new String[5 + n * 4][5 + n * 4];
		int zx = len / 2;
		// 初始化
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				arr[i][j] = ".";
			}
		}
		// 填充中心的十字
		for (int i = zx - 2; i <= zx + 2; i++) {
			arr[i][zx] = "$";
			arr[zx][i] = "$";
		}
		// 填充外层的圈
		for (int m = 0; m < n; m++) {
			for (int i = zx - (2+m*2); i <= zx + 2+2*m; i++) {
				arr[zx - (4+m*2)][i] = "$";
				arr[zx + 4+m*2][i] = "$";
				arr[i][zx - (4+m*2)] = "$";
				arr[i][zx + 4+m*2] = "$";
			}
			for (int i = zx - (3+m*2); i <= zx + 3+m*2; i++) {
				arr[zx - (2+m*2)][i] = "$";
				arr[zx + 2+m*2][i] = "$";
				arr[i][zx + 2+m*2] = "$";
				arr[i][zx - (2+m*2)]= "$";
			}
			arr[zx - (2+m*2)][zx - (1+m*2)] = ".";
			arr[zx - (2+m*2)][zx + 1+m*2] = ".";
			arr[zx + 2+m*2][zx - (1+m*2)] = ".";
			arr[zx + 2+m*2][zx + 1+m*2] = ".";

			arr[zx - (1+m*2)][zx - (2+m*2)] = ".";
			arr[zx + 1+m*2][zx - (2+m*2)] = ".";
			arr[zx - (1+m*2)][zx + 2+m*2] = ".";
			arr[zx + 1+m*2][zx + 2+m*2] = ".";
		}
		// 打印
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j]);
			}
			System.out.println();
		}

	}
}


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/Jayme/p/4902366.html