`
atell
  • 浏览: 159184 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

[C趣味算法]打印杨辉三角

阅读更多

打印杨辉三角。

有2种方法.

 

第一种使用递归,方法简单,公式如下:

c(x,y)=

1 , (x=1或x=N+1)

c(x-1,y-1)+x(x-1,y) , (其他)

但是缺点是每个数都需要递归,存在很多重复的递归,浪费时间。

public class MakeYanghuiSanjiao {

    public static void main(String[] args) {
        // 打印N行的杨辉三角
        int N = 10;

        // 打印各行。m为行号,n为列号,从0开始。
        for (int m = 0; m < N; m++) {
            for (int n = 0; n <= m; n++) {
                System.out.print(c(m, n) + " ");
            }
            System.out.println();
        }

    }

    public static int c(int m, int n) {
        if (n == 0 || n == m) {
            return 1;
        } else {
            return c(m - 1, n - 1) + c(m - 1, n);
        }
    }

}
 

 

 

 

第二种使用一个2行的数组存储结果,例如当计算第5行时,数组中存储着第4行的数据。

这样的话,使用了2倍N个int做存储,用空间换取时间。

 

public class MakeYanghuiSanjiao {

    public static void main(String[] args) {
        // 打印n行的杨辉三角
        int n = 10;

        // 使用行为2,列为n的辅助数组,存储运行时的前一行和当前行的结果
        int[][] array = new int[2][n];
        // 打印各行
        for (int i = 0; i < n; i++) {
            // 构造第i行的第0个数
            array[i%2][0] = 1;
            // 构造第i行的第1个到第i个数
            for (int j = 1; j < i + 1; j++) {
                array[i % 2][j] = array[(i - 1) % 2][j - 1] + array[(i - 1) % 2][j];
            }
            // 打印第i行
            for (int j = 0; j < i + 1; j++) {//第i行的列数是i+1
                System.out.print(array[i % 2][j]+" ");
            }
            System.out.println();
        }

    }

}
 

 

 

效果:

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1 
 

 

 

分享到:
评论

相关推荐

    算法设计与分析PPT(C语言完整版)

    《算法设计与分析》目录: 第一篇引入篇 第1章算法概述1.1用计算机求解问题与算法 1.1.1用计算机求解问题的步骤 1.1.2算法及其要素和特性 1.1.3算法设计及基本方法 1.1.4从算法到实现 1.2算法描述 1.2.1算法描述简介...

    Cc++趣味程序百例(献给CC++初学者)借鉴.pdf

    其他程序包括歌星大奖赛、求最大数、高次方数的尾数、阶乘尾数零的个数、借书方案知多少、杨辉三角形、数制转换、打鱼还是曬网、抓交通肇事犯等等,每个程序都有其独特的算法和实现方式。 本资源是一个非常有价值的...

    Java趣味编程100例 清华大学出版社.zip

    1.5 杨辉三角 12 1.6 国际象棋棋盘 16 1.7 心形图 19 1.8 回型矩阵 22 1.9 小结 26 第2章 身边的数学问题( 教学视频:59分钟) 27 2.1 黑色星期五 27 2.2 个人所得税 29 2.3 存钱问题 34 2.4 赛场统分 35 ...

    C/C++经典实用趣味程序设计编程例子精解(DOC)

    杨辉三角形 10.数值转换 11.打鱼还是晒网 12.抓交通肇事犯 13.该存多少钱 14.怎样存钱利最大 15.捕鱼和分鱼 16.出售金鱼 17.平分七筐鱼 18.有限5位数 19.8除不尽的自然数 ...

    趣味C++小程序.rar

    八皇后游戏、this指针的应用、二分法求方程根、模拟抛硬币所得正面的频率图、一个小公司的工资管理系统、二分查找算法、汉诺塔、杨辉三角形等27各C++小程序,供初学者参考

    Visual C++开发实战1200例 第二章

    第1篇 编程基础 ...实例071打印杨辉三角 2.8 算法 实例072计算某日是该年第几天 实例073斐波那契数列 实例074角谷猜想 实例075哥德巴赫猜想 实例076四方定理 实例077尼科彻斯定理 实例078魔术师的秘密

    C程序范例宝典(基础代码详解)

    实例017 打印杨辉三角 22 1.4 循环的数学应用 23 实例018 序列求和 23 实例019 简单的级数运算 24 实例020 用while语句求n! 25 实例021 特殊等式 26 实例022 求一个正整数的所有因子 27 实例023 ...

    提高C语言初学者编程能力的几点措施.pdf

    编程练习除了注意与示例程序的相关性外,还要注意其典型的、趣味性、实用性,学生往往对趣味程序、游戏程序感兴趣,可以加强这方面的练习,如:九九乘法表、杨辉三角形、约瑟夫问题、Hanoi塔问题、哥德巴赫猜想等。...

Global site tag (gtag.js) - Google Analytics