历届试题 打印十字图

题目描述

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

java实现 历届试题 蓝桥杯 打印十字图的更多相关文章

  1. 蓝桥杯-打印十字图-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  2. Java实现第九届蓝桥杯打印大X

    打印大X 题目描述 如下的程序目的是在控制台打印输出大X. 可以控制两个参数:图形的高度,以及笔宽. 用程序中的测试数据输出效果: (如果显示有问题,可以参看p1.png) 高度=15, 笔宽=3 * ...

  3. 蓝桥杯 历届试题 PREV-2 打印十字图

    历届试题 打印十字图   时间限制:1.0s   内存限制:256.0MB 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示: 对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并 ...

  4. Java实现第九届蓝桥杯全球变暖

    全球变暖 题目描述 你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: ....... .##.... .##.... ....##. ...

  5. 打印十字图 JAVA 递归实现

    这个是我自己想的,头疼了一个下午,不过还好.做出来了.在网上找这道题但没有找到用递归的做法. /*递归思想实现 * 标题:打印十字图 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可 ...

  6. java实现第六届蓝桥杯打印大X

    打印大X 打印大X 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度. 为了便于比对空格,所有的空白位置都以句点符来代替. 要求输入两个整数m n,表示笔的宽度,X的高度.用 ...

  7. Java实现第九届蓝桥杯小朋友崇拜圈

    小朋友崇拜圈 题目描述 班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己). 在一个游戏中,需要小朋友坐一个圈, 每个小朋友都有自己最崇拜的小朋友在他的右手边. 求满足条件的圈最大多少人 ...

  8. Java实现第十一届蓝桥杯JavaB组 省赛真题

    试题 A: 指数计算 本题总分:5 分 [问题描述] 7 月 1 日是建党日,从 1921 年到 2020 年, 已经带领中国人民 走过了 99 年. 请计算:7 ^ 2020 mod 1921,其中 ...

  9. Java实现 第十一届 蓝桥杯 (高职专科组)省内模拟赛

    有错误的或者有问题的欢迎评论 十六进制数1949对应的十进制数 19000互质的数的个数 70044与113148的最大公约数 第十层的二叉树 洁净数 递增序列 最大的元素距离 元音字母辅音字母的数量 ...

随机推荐

  1. Django 设置admin后台表和App(应用)为中文名

    设置表名为中文 1.设置Models.py文件 class Post(models.Model): name = models.CharField() --省略其他字段信息 class Meta: v ...

  2. Qt数据库总结

    使用Qt SQL库 头文件: #include <QtSql> 项目: QT += sql 常用类 QSqlDatabase:数据库的连接打开等操作 QSqlQuery:执行语句,获取结果 ...

  3. vue滑动吸顶以及锚点定位

    Vue项目中需要实现滑动吸顶以及锚点定位功能.template代码如下: <template> <div class="main"> <div id= ...

  4. [hdu5247]rmq+预处理

    题意:有一个无序数组,求有多少个长度为k的区间满足把区间内的数排序后是连续的. 思路:长度为k的区间排序后是 连续的数等价于maxval-minval等于k-1并且不同的数有k个(或者说没有相同的数) ...

  5. 在dynamics 365 中,看字段的描述需要到系统字段设置里面才能看到,这里提供一种sql直接看字段和实体名描述的方法

    1.在crm对应的主数据库执行下面存储过程: -- ============================================= -- Author: <Author,,Name& ...

  6. C:习题1

    C 语言具有哪些主要特点? 1.兼高级语言和汇编语言优点的语言 2.一种结构化程序设计语言 3.语言数据类型丰富 4.具有种类丰富的运算符 5.有预处理功能 C 语言的主要用途是什么? 1.作为一种系 ...

  7. 修改jupyter默认保存文件的目录

    1.打开 Anaconda Prompt输入命令 jupyter notebook --generate-config 2.可以看到生成了目录及jupyter notebook的配置文件,打开该文件. ...

  8. 走向统一的 .NET 旅程

    这是微软第一次完全线上举办的Build大会,也是第一次完全属于开发者的大会.几乎所有的新产品都是属于开发者,开发者成为了唯一的主角. 现在的微软比以往任何时候都贴近开发者,重视开发者的作用,为他们打造 ...

  9. APP测试知识中的monkey测试

              了解了logging模块的应用 1)两种方式,1:日志级别函数 2:日志级别的四大组件来实现日志功能(日志流处理) 2)日志流处理日志logging四大组件:logger(日志器) ...

  10. python中copy与deepcopy的区别

    目录 区别 python代码举例 区别 高级语言中变量是对内存及其地址的抽象 copy.copy(object), 拷贝的是内嵌套结构的地址引用,当前到结构发生变化的时候,浅拷贝也相应的改变. cop ...