美文网首页
打印一个用星星填满的等腰三角形 - Java算法练习

打印一个用星星填满的等腰三角形 - Java算法练习

作者: teaGod | 来源:发表于2017-09-05 16:46 被阅读0次

我们的目的是打印出一个用 “*” 符号填满的等腰三角形,就像下面这样

用星星填满的三角形

乍一看起来,挺简单的,但是上手之后,发现各种问题,怎么保证每行的 “*” 对称居中呢?

要解决这个问题,首先来让我们把问题分解一下,以三角形的高为轴,把三角形劈成两半,就像下面这样

劈成两半后形成的直角三角形 劈成两半后形成的直角三角形

这样看起来就简单多了,只要我们先打印出两个对称的直角三角形,然后再拼接完整就可以了。

下面的这个三角形看起来实现非常简单,我脑海中第一个冒出的解决方法是定义一个String字符串,然后每次循环在字符串末尾追加一个 “*” ,我甚至还把代码写了出来。

但是等到写上面的直角三角形时,我傻了,这个怎么用String实现啊,不行,想了一会之后我放弃了。

后来我选择了用数组,这样只需找出矩阵的对角线,然后在对角线上下方根据情况填充 “*” 就可以了。

code开始。

  • 为了打印第一个直角三角形,我定义了一个6*6的数组,然后判断对角线形成的边界条件,代码如下:
public static void main(String[] args) {
        char[][] s =new char[6][6];
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                if (i + j < 5)
                    s[i][j] = ' ';
                else
                    s[i][j] = '*';
            }
        }
        printArray(s);
}
  • 然后是第二个直角三角形,同样的方法,只是矩阵对角线的边界条件改变一下:
    public static void main(String[] args) {
        char[][] s =new char[6][6];
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                if (i < j)
                    s[i][j] = ' ';
                else
                    s[i][j] = '*';
            }
        }
        printArray(s);
    }
  • 最后是合并上面的两个三角形,但这里要注意一点,合并之后,我们的矩阵大小肯定要变成之前的二倍,但是需要行和列都变大吗?
    并不需要,我们只需要列变成二倍就可以了,行不用变,因为行变大二倍之后你是怎么都不可能打印出一个等腰三角形的。
    接下来放上代码:
    public static void main(String[] args) {
        char[][] s =new char[6][13];
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                if (i + j < 6)
                    s[i][j] = ' ';
                else
                    s[i][j] = '*';
            }
        }
        for (int i = 0; i < 6; i++) {
            for (int j = 6; j < 13; j++) {
                if (i + 6< j)
                    s[i][j] = ' ';
                else
                    s[i][j] = '*';
            }
        }
        printArray(s);
    }

    public static void printArray(char[][] s) {
        for (int i = 0; i < s.length; i++) {
            for (int j = 0; j < s[i].length; j++) {
                System.out.print(s[i][j]);
            }
            if (i != 5) {
                System.out.println();
            }
        }
    }

这里,为了使我们的等腰三角形顶点只有一个 “*” ,让矩阵增加了一列,变成了奇数列,然后把上面的两段代码组合起来,修改一下边界条件,结果运行成功。

最后,我们把代码改得严谨一点,去除具体的数值判断,改为根据数组的长度判断,代码如下:

public static void main(String[] args) {
        char[][] s =new char[6][13];
        for (int i = 0; i < s.length; i++) {
            for (int j = 0; j < s[i].length / 2; j++) {
                if (i + j < s[i].length / 2)
                    s[i][j] = ' ';
                else
                    s[i][j] = '*';
            }
        }
        for (int i = 0; i < s.length; i++) {
            for (int j = s[i].length / 2; j < s[i].length; j++) {
                if (i + s[i].length / 2 <  j)
                    s[i][j] = ' ';
                else
                    s[i][j] = '*';
            }
        }
        printArray(s);
}
public static void printArray(char[][] s) {
        for (int i = 0; i < s.length; i++) {
            for (int j = 0; j < s[i].length; j++) {
                System.out.print(s[i][j]);
            }
            if (i != s.length - 1) {
                System.out.println();
            }
        }
}

谢谢(^_^)

相关文章

  • 打印一个用星星填满的等腰三角形 - Java算法练习

    我们的目的是打印出一个用 “*” 符号填满的等腰三角形,就像下面这样 乍一看起来,挺简单的,但是上手之后,发现各种...

  • chimier-c++-day04

    break 和 continue continue 循环嵌套 for版本 打印等腰三角形星星 水仙花数 找到所有的...

  • 2018-12-20

    训练3: 打印等腰三角形

  • Linux C 编程详解第四篇:数组

    循环 练习: 1、 求出1到10000 之间的完全数. 2、 输入数字n , 打印n行*号, 组成等腰三角形. 3...

  • 4-循环练习_数组

    循环 练习: 1、 求出1到10000 之间的完全数. 2、 输入数字n , 打印n行*号, 组成等腰三角形. 3...

  • Java入门练习:循环

    用小星星打印形状 编写程序打印出下面这个: 再写一个打印,打印出下面这个形状的小星星: 编写程序,输出斐波那契数列...

  • Java算法基本功练习

    该篇为Java算法基本功小练习,适合初学者练手的题。 1.打印九九乘法表。 运行结果: 2.定义一个二维数组,in...

  • 2018-12-20(3)

    作业要求 打印等腰三角形。 代码 ...int j;Console.WriteLine("请输入等腰三角形的行数:...

  • GO语言初级学习之代码案例03

    GO语言初级学习之代码案例03 @(go语言 黑马)[GO语言] 打印等腰三角形 题目:通过程序打印出一个“ * ...

  • 4.22 二刀的python回锅肉

    作业 作业一 打印三角形 运行结果: 打印倒三角形 运行结果: 打印等腰三角形 运行结果:

网友评论

      本文标题:打印一个用星星填满的等腰三角形 - Java算法练习

      本文链接:https://www.haomeiwen.com/subject/froujxtx.html