打印六芒星-java实现

  • 题目要求
  • 总体思路
  • 具体实现
  • 代码片
  • 总结

题目要求

【输入格式】
输入一行包含一个整数 n。
【输出格式】
输出一个六芒星,表示满足题意的图形。
【样例输入】
3
4
【样例输出】


【评测用例规模与约定】
对于所有评测用例,1 ≤ n ≤ 20。

总体思路

六芒星可以看成是两个三角形组成,如图:

所以只要分别写出来这两个三角形,最后组合在一起即可。

具体实现

既然是图形问题,那么可以用二位数组来存储,我这里用的是二维字符数组,其中

char[][] topShape = new char[4*n-3][6*n-5];
//表示上面的三角形
char[][] botShape = new char[3*n-2][6*n-5];
//表示下面的三角形

然后再解释一下数组的大小,先说一下上面三角形的大小(包括自己和下面的大小),下面三角形的很容易就出来了。例如这个示例,整个黄框表示第一个数组的二维平面大小,其中高度为4个三角形的高度减去3条重复高,用数学式表示就是4*n-3。,如图:

而宽度就是3个三角形宽减去2个重复宽,也就是(n+n-1)*3-2=6n-5,其中(n为*号数量,n-1为空格数量),如图:

得到了上面三角形大小,下面三角形只要取它自己的部分即可,宽度与上面相同,而高度只要照上面的-(n-1)即可,也即4n-3-(n-1)=3n-2如图:

接着讨论一下什么时候是‘*’,什么时候是‘ ’,先看一下上面三角形,可以先选取一个中点,然后没下一层,‘*’就会向两端移动,如图:

用伪代码看一下

mid = 中间位置
if (i1==mid||i1==6*n-6-mid) topShape[i][i1] = '*';
//if中可以理解成,从左边数到星的距离(i1==mid)跟从右边数到星的距离(i1==6*n-6-mid),i1==mid好理解,而i1因为是下标所以6*n-5-mid还得再-1

然后三角形最后一行用一个判断语句,如果到最后一行,就整行用星星和空格依次填入(用奇偶位置判断),

 if (i1%2==0) topShape[i][i1] = '*';else topShape[i][i1] = ' ';

下面那个倒三角跟正三角差不多一直实现思路。
两个三角形都实现后,那么就可以把第二个三角形“粘”到第一个上面。

代码片

public class SixStar {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();char[][] ans = creatStar(n);printSixStar(ans);}//构造图形数组函数public static char[][] creatStar(int n){char[][] topShape = new char[4*n-3][6*n-5];char[][] botShape = new char[3*n-2][6*n-5];//第一步修改上层图形int mid = 3*n-3;for (int i = 0; i < topShape.length; i++) {for (int i1 = 0; i1 < topShape[i].length; i1++) {if (i<3*n-3){if (i1==mid||i1==6*n-6-mid) topShape[i][i1] = '*';else topShape[i][i1] = ' ';}else if (i == 3*n-3){if (i1%2==0) topShape[i][i1] = '*';else topShape[i][i1] = ' ';}else{topShape[i][i1] = ' ';}}--mid;}//第二部修改下层图形是反的mid=0;for (int i = 0; i < botShape.length; i++) {for (int i1 = 0; i1 < botShape[i].length; i1++) {if (i>0){if (i1==mid||i1==6*n-6-mid) botShape[i][i1] = '*';else botShape[i][i1] = ' ';}else{if (i1%2==0) botShape[i][i1] = '*';else botShape[i][i1] = ' ';}}++mid;}//第三步合并两个图形for (int i = n-1; i < topShape.length; i++) {for (int i1 = 0; i1 < topShape[i].length; i1++) {if (botShape[i-n+1][i1] == '*') topShape[i][i1] = '*';}}return topShape;}//打印图形函数public static void printSixStar(char[][] ans){for (char[] an : ans) {for (char c : an) {System.out.print(c);}System.out.println();}}
}

总结

细心的人可能看到有许多重复的循环,改进一下可以使代码更加整洁并减少时间复杂度,这里只是为了方便理解。

打印六芒星_java相关推荐

  1. 关于 蓝桥杯 打印六芒星 的 另类方法

    关于 蓝桥杯 打印六芒星 的 另类方法 刚入门不久的人也能做出来的一种方法 或者了解很深的人也可能不知道的一个方法 原题如下 [输入格式] 输入一行包含一个整数 n. [输出格式] 输出一个六芒星,表 ...

  2. 经典算法_01 打印六芒星、打印图形练习

    距离蓝桥杯倒计时十天,猿猿的蓝桥杯突击之旅.突击一: 题目 打印图形 时间限制: 1.0s 内存限制: 512.0MB [问题描述] 小明刚学习完条件语句和循环语句,并且也打印了许多图形,比如菱形或者 ...

  3. 利用java打印正三角形_JAVA一层for循环实现打印正三角形和到三角形

    打印正三角形 package com.liuc.test; public class TrianglePrint4 { public static void main(String[] args) { ...

  4. C语言实验——打印金字塔_JAVA

    输入n值,打印下列形状的金字塔,其中n代表金字塔的层数. Input 输入只有一个正整数n. Output 打印金字塔图形,其中每个数字之间有一个空格. Sample Input 3 Output 1 ...

  5. java ee打印功能_Java EE 8的前5个新功能

    java ee打印功能 备受期待的Java Enterprise Edition 8版本具有两个令人兴奋的新API(JSON绑定1.0和Java EE Security 1.0),并且对当前API进行 ...

  6. java ee打印功能_Java EE:异步构造和功能

    java ee打印功能 介绍 Java EE具有许多API和构造以支持异步执行. 从可伸缩性和性能的角度来看,这是至关重要的. 让我们假设2个模块相互交互. 当模块A (发送方)以同步方式向模块B ( ...

  7. java打印数组_Java中打印数组内容的方式有哪些?

    下面是几种常见的打印方式. 方法一:使用循环打印. public class Demo { public static void main(String[] args) { String[] info ...

  8. 线程打印状态_Java线程状态的转换

    根据上面关于线程状态的介绍我们可以得到下面的线程状态转换图: BLOCKED与RUNNABLE状态的转换 我们在上面说到:处于BLOCKED状态的线程是因为在等待锁的释放.假如这里有两个线程a和b, ...

  9. java 打印命令_Java 普通命令行程序main关掉 DEBUG 打印

    最近在写一个简单的java命令行程序,执行代码时,代码窗口出现了烦人的debug日志. 分析了一下,出现这种问题的原因是因为,maven项目的依赖包中传递依赖了一些日志框架,导致会出现日志内容的打印. ...

最新文章

  1. Java项目-基于SSM实现律师事务所管理平台
  2. Python中的collections
  3. Android为TV端助力 转载:Java 泛型
  4. QGIS简介与源代码编译
  5. AT COMMAND的命令集
  6. python爬取ajax动态内容肯德基门店,Python爬虫如何爬取KFC地址
  7. 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据
  8. 关于servlet类,继承HttpServlet,但是无法导入HttpServlet包的原因和解决方法
  9. SQL Server系统视图/表/功能。 现实生活中的常见问题和解决方案
  10. 开源项目到底归谁管?
  11. Commons IO 2.5-IOUtils
  12. hadoop启动_hadoop服务快速部署
  13. OPENJDK8 32位版本,JAVA启动时Xmx参数的影响
  14. 获取各城市poi数据
  15. 根据身份证判断男女(通用)
  16. redis持久化底层原理-RDB与AOF
  17. 猿人学web端爬虫攻防大赛赛题解析_第四题:雪碧图、样式干扰
  18. 如何用sql语句对性别的 约束条件让它只能填 男 或 女
  19. 投影仪连接wifi无法连接网络认证如何处理
  20. Halcon入门教程手册

热门文章

  1. macbook自带python保存文件夹_在mac下查找python包存放路径site-packages的实现方法 在Mac系统下python如何安装第三方函数库?...
  2. 华为模拟器ENSP router设备上display ip routing-table详解
  3. 使用sqlhelper类查询时假如不需要参数化,那到时SqlParameter这个传参怎么处理
  4. linux centos安装scp,CentOS使用不了scp命令怎么办?
  5. 关于移动硬盘插入后无显示的问题
  6. ionic:引入图标
  7. 三十分钟理解:矩阵Cholesky分解,及其在求解线性方程组、矩阵逆的应用
  8. 2、股权融资 - 打造企业上市系列文章
  9. 职场上35岁以上的人都去哪了?
  10. org.apache.jasper.el.ELContextImpl cannot be cast to org.apache.jasper.el.ELContextImpl