栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

每日经典算法题(十九) 打印菱形

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日经典算法题(十九) 打印菱形

每日经典算法题(十九) 打印菱形

菱形:Diamond

题目

打印出如下图案(菱形)

     *
    ***
   *****
  *******
   *****
    ***
     *
程序分析

先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制
行,第二层控制列。

思路

第一次看这道题的时候根本没有思路,不过偶然间一看 * 号的排列好像前几天的乘法表排列啊,只不过每一排比上一排多了两个而且起始的位置不同。

我们换一种思路思考,起始的位置不同是因为什么?突然发现是因为多了几个空格,而空格数也在规律地逐行减少。

我们先将图形分为上四行和下三行考虑,上四行空格数逐行减一,* 号逐行加二,那么灵感来了。可以利用二重 for 循环,外层控制行数,内层控制空格和 * 号数,这里内层需要有两个 for 循环先后执行。

其次,我们要决定每一层循环的次数:

  • 外层不必多说是 4 次(i = 4)
  • 内层空格部分,空格数是随着行数的增加而减少的,规律为行数 + 1,空格数 - 1,所以循环次数是从 0 到 (4 - i)次。
  • 内层星号部分,星号数是随着行数的增加而增加的,规律为行数 + 1,星号数 + 2,所以循环次数是从 0 到 (i * 2)次。

下三行同理,注意循环的次数和初始值即可。

此外,每一次的内层循环以后需要换行,否则将都在同一行输出。

代码示例
public class Q19_Loop_PrintDiamond {
    public static void main(String[] args) {
        for (int i=0;i<4;i++){
            for (int j=0;j<4-i;j++){
                System.out.print(" ");
            }
            for (int k=0;k<=i*2;k++){
                System.out.print("*");
            }
            System.out.println();
        }
        for (int i=3;i>0;i--){
            for (int k=0;k<=4-i;k++){
                System.out.print(" ");
            }
            for (int j=0;j 
输出结果 
    *
   ***
  *****
 *******
  *****
   ***
    *
  • Day19 打卡成功!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284481.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号