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



    标题:打印十字图

        小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见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();
    		}
    
    	}
    }
    


     

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

  • 相关阅读:
    嵌入式Linux系统移植(二)——交叉编译工具集
    嵌入式linux系统移植(一)
    C语言常用关键语法精华总结
    ARM汇编常用指令
    嵌入式Linux系统移植——uboot常用命令
    VHDL的参数写在一个vhd文件里
    [PAT] 1077 Kuchiguse (20 分)Java
    [PAT] 1073 Scientific Notation (20 分)Java
    [PAT] 1069 The Black Hole of Numbers (20 分)Java
    [PAT] 1065 A+B and C (64bit) (20 分)Java
  • 原文地址:https://www.cnblogs.com/Jayme/p/4902366.html
Copyright © 2020-2023  润新知