[Java] 展示杨辉三角中数字的奇偶性

我看了一个介绍分形和杨辉三角的视频,其中提到了杨辉三角中数字的奇偶性,联想到奇偶性和布尔运算有密切联系,于是写了点代码来展示杨辉三角中数字的奇偶性。

杨辉三角中的每个数字 n u m num num 都等于它左上角的数字 L L L 和右上角数字 R R R 的和(如果一个数字左上角没有数字或者右上角没有数字,那么这个数字的值为 1 \text{1} 1)。如果我们只关注数字的奇偶性,那么可以这样分析 ⬇️ (下表的分析仅针对 L L L 和 R R R 都存在的情况)

L L L 是否为奇数 R R R 是否为奇数 n u m = L + R num=L+R num=L+R 是否为奇数

至于边界值(即左上角没有数字或者右上角没有数字的那些数字)的处理,我们可以在数组中多存放 2 2 2 个元素。如果杨辉三角中某一行有 k k k 个数字,那么我们就用有 k + 2 k+2 k+2 个元素的 b o o l e a n boolean boolean 数组来保存各个数字的奇偶性(这样判定下一行各个数字的奇偶性时,会很好处理)。在此基础上,可以写出这样的代码 ⬇️

java 复制代码
public class Analyzer {

    public void displayRow(boolean[] currValues, int n) {
        for (int i = 1; i <= n; i++) {
            System.out.print(currValues[i] ? '*' : ' ');
        }
        System.out.println();
    }

    public void analyze(int bound) {
        int n = 1;
        // currValues[0] and currValues[len - 1] are always false
        boolean[] currValues = new boolean[]{false, true, false};
        while (true) {
            displayRow(currValues, n);
            if (++n == bound) {
                break;
            }
            currValues = calcNextValues(currValues, n);
        }
    }

    private boolean[] calcNextValues(boolean[] currValues, int n) {
        boolean[] nextValues = new boolean[n + 2];
        for (int i = 1; i <= n; i++) {
            nextValues[i] = currValues[i - 1] != currValues[i];
        }
        return nextValues;
    }

    public static void main(String[] args) {
        new Analyzer().analyze(80);
    }
}

请将以上代码保存为 Analyzer.java。运行如下命令就可以编译 Analyzer.java

bash 复制代码
javac Analyzer.java

运行如下命令可以运行 Analyzer 中的 main 方法。

bash 复制代码
java Analyzer

在我电脑上的运行结果如下 ⬇️ (* 表示这个位置的数字是奇数,空格表示这个位置的数字是偶数)

text 复制代码
*
**
* *
****
*   *
**  **
* * * *
********
*       *
**      **
* *     * *
****    ****
*   *   *   *
**  **  **  **
* * * * * * * *
****************
*               *
**              **
* *             * *
****            ****
*   *           *   *
**  **          **  **
* * * *         * * * *
********        ********
*       *       *       *
**      **      **      **
* *     * *     * *     * *
****    ****    ****    ****
*   *   *   *   *   *   *   *
**  **  **  **  **  **  **  **
* * * * * * * * * * * * * * * *
********************************
*                               *
**                              **
* *                             * *
****                            ****
*   *                           *   *
**  **                          **  **
* * * *                         * * * *
********                        ********
*       *                       *       *
**      **                      **      **
* *     * *                     * *     * *
****    ****                    ****    ****
*   *   *   *                   *   *   *   *
**  **  **  **                  **  **  **  **
* * * * * * * *                 * * * * * * * *
****************                ****************
*               *               *               *
**              **              **              **
* *             * *             * *             * *
****            ****            ****            ****
*   *           *   *           *   *           *   *
**  **          **  **          **  **          **  **
* * * *         * * * *         * * * *         * * * *
********        ********        ********        ********
*       *       *       *       *       *       *       *
**      **      **      **      **      **      **      **
* *     * *     * *     * *     * *     * *     * *     * *
****    ****    ****    ****    ****    ****    ****    ****
*   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
****************************************************************
*                                                               *
**                                                              **
* *                                                             * *
****                                                            ****
*   *                                                           *   *
**  **                                                          **  **
* * * *                                                         * * * *
********                                                        ********
*       *                                                       *       *
**      **                                                      **      **
* *     * *                                                     * *     * *
****    ****                                                    ****    ****
*   *   *   *                                                   *   *   *   *
**  **  **  **                                                  **  **  **  **
* * * * * * * *                                                 * * * * * * * *
相关推荐
Tisfy7 小时前
LeetCode 3345.最小可整除数位乘积 I:暴力枚举(从n开始尝试)
数学·算法·leetcode·题解·枚举
闻缺陷则喜何志丹14 小时前
【高等几何 梅向明】正交变换与仿射变换
数学·仿射变换·高等几何·投影几何·正交变换
Luhui Dev4 天前
几何题配图 API 怎么选?从文本生成到可编辑源文件的接入指南
人工智能·数学·agent·luhuidev
EQUINOX15 天前
【NCE】
数学
Tisfy7 天前
LeetCode 3014.输入单词需要的最少按键次数 I:遍历 / if-else计算(比纯数学公式写起来麻烦但好想)
数学·算法·leetcode·字符串·题解·贪心
闻缺陷则喜何志丹10 天前
【计算几何第五章】正交区域查找:数据库查询
数学·计算数学·区域树·kd树·树套树·正交区域查询·二维线段树
jz_ddk12 天前
[信号处理] 数学与工程之美:相邻差分共轭乘积
数学·算法·信号处理·差分·共轭
anew___12 天前
历史性突破!两位中国数学家同摘“数学界诺奖”,改写百年难题
数学·菲尔兹奖
Tisfy12 天前
LeetCode 3536.两个数字的最大乘积:O(1)空间维护max2
数学·算法·leetcode·题解
闻缺陷则喜何志丹14 天前
【计算几何 第四章】线性规划:铸模制造
数学·计算几何·线性规划·铸造