zoukankan      html  css  js  c++  java
  • java实现 历届试题 蓝桥杯 打印十字图

    历届试题 打印十字图
    题目描述
    小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)

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

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

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

    例如:
    用户输入:
    1
    程序应该输出:
    在这里插入图片描述

    再例如:
    用户输入:
    3
    程序应该输出:
    在这里插入图片描述

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

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

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

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

    在这里插入图片描述
    问题分析:
    当我看到这个题目的时候,密密麻麻的完全看不出来哪里有个十字嘛。将上面的文字符号图像形象化一下,如下图:

    这张图,中间是个十字,外面是一层一层的圈。我们再加几条线,就能更清晰一些了。如下图:

    我们将图片左上角分成3个区域。好了,接下来说说我们的打印思路:

    思路:
    (我们只打印 ’ $ ',不打印 ’ . ’ )
    第一步:将整个图片全部初始化为白色格子(我们只打印红色格子)。

    第二步:打印中心十字(也可以只打印左上角部分的十字)。

    第三步:打印A区域,从图片的中心点开始(注意规律:1,3,5,7个数)。

    第四步:打印C区域,同样从中心开始打印(注意规律)

    第五步:沿着对角线打印B区域。(OK现在基本上打印完毕了)

    第六步:根据对称性,我们将图片(左右对折,上下对折,沿着对角线对折),OK图片打印完毕。

    ps:这里有个需要注意的地方,就是打印的时候,不要加空格,你看它的图形是长方形的,如果你加上了空格就变成了正方形的了。

    import java.util.Scanner;
    
    public class 打印十字图 {
    	  public static void getResult(int n) {
    	        int len = 5 + 4 * n;
    	        int mid = len / 2;
    	        char[][] result = new char[len][len];
    	        for(int i = 0;i < len;i++)
    	            for(int j = 0;j < len;j++)
    	                result[i][j] = '.';
    	        //中间的3*3的直线
    	        for(int i = mid - 2;i <= mid + 2;i++) {
    	            result[mid][i] = '$';
    	            result[i][mid] = '$';
    	        }
    	        //这里是从中心向外进行更改
    	        for(int i = 1;i <= n;i++) {
    	        	//各个方向的连线,上下左右四个方向的连线
    	            for(int j = mid - 2 * i;j <= mid + 2 * i;j++) {
    	                result[mid - 2 * (i + 1)][j] = '$';
    	                result[mid + 2 * (i + 1)][j] = '$';
    	                result[j][mid - 2 * (i + 1)] = '$';
    	                result[j][mid + 2 * (i + 1)] = '$';
    	            }
    //	            for(int i1 = 0;i1 < len;i1++) {
    //		            for(int j = 0;j < len;j++) {
    //		                System.out.print(result[i1][j]);
    //		            }
    //		            System.out.println();
    //		        }
    	            //这里的三个点就是四个角方向的直角的三个点
    	            //左上角
    	            result[mid - 2 * i][mid - 2 * i] = '$';
    	            result[mid - 2 * i][mid - 2 * i - 1] = '$';
    	            result[mid - 2 * i - 1][mid - 2 * i] = '$';
    	            //右上角
    	            result[mid - 2 * i][mid + 2 * i] = '$';
    	            result[mid - 2 * i - 1][mid + 2 * i] = '$';
    	            result[mid - 2 * i][mid + 2 * i + 1] = '$';
    	            //左下角
    	            result[mid + 2 * i][mid - 2 * i] = '$';
    	            result[mid + 2 * i][mid - 2 * i - 1] = '$';
    	            result[mid + 2 * i + 1][mid - 2 * i] = '$';
    	            //右下角
    	            result[mid + 2 * i][mid + 2 * i] = '$';
    	            result[mid + 2 * i][mid + 2 * i + 1] = '$';
    	            result[mid + 2 * i + 1][mid + 2 * i] = '$';
    	        }
    	        for(int i = 0;i < len;i++) {
    	            for(int j = 0;j < len;j++) {
    	                System.out.print(result[i][j]);
    	            }
    	            System.out.println();
    	        }
    	    }
    	    
    	    public static void main(String[] args) {
    	        
    	        Scanner in = new Scanner(System.in);
    	        int n = in.nextInt();
    	        getResult(n);
    	    }
    }
    
    
    
  • 相关阅读:
    数据可视化之DAX篇(二十)Think in DAX 之报表自动化实践
    数据可视化之DAX篇(十九)值得你深入了解的函数:SUMMARIZE
    数据可视化之DAX篇(十八)收藏 | DAX代码格式指南
    数据可视化之DAX篇(十七)Power BI表格总计行错误的终极解决方案
    atomic_compare_exchange_weak_explicit (Atomic operations) – C 中文开发手册
    Spring Boot的How-to指南:嵌入式Web服务器
    C# 文本文件的读写
    CSS outline 属性
    operator (Numeric & Mathematical) – Python 中文开发手册
    HTML DOM Style animationDirection 属性
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12948968.html
Copyright © 2011-2022 走看看