杨辉三角
2016-05-25 15:57
507 查看
百科:链接
前10列:
前10列:
递归法:
#include <stdio.h> #include <stdlib.h> //计算杨辉三角数 int Fun(int i, int j) { if (0 == j || i == j) return 1; return Fun(i - 1, j - 1) + Fun(i - 1, j); } int main() { int n; while(scanf("%d", &n)){ system("cls"); printf("%d行杨辉三角:\n", n); for (int i = 0; i < n; i++) { for (int j = n - i - 1; j > 0; j--) printf(" "); for (int j = 0; j <= i; j++) printf("%-3d ", Fun(i, j)); printf("\n"); } printf("\n"); } return 0; }
动态规划法:
#include <stdio.h> #include <stdlib.h> #define MAX_N 1000 //计算杨辉三角数 (动态规划记录,速度快但牺牲空间为代价) int Fun(int i, int j) { static int dp[MAX_N][MAX_N] = {0}; if(dp[i][j]) return dp[i][j]; if (0 == j || i == j) return dp[i][j] = 1; return dp[i][j] = Fun(i - 1, j - 1) + Fun(i - 1, j); } int main() { int n; while(scanf("%d", &n)){ system("cls"); printf("%d行杨辉三角:\n", n); for (int i = 0; i < n; i++) { for (int j = n - i - 1; j > 0; j--) printf(" "); for (int j = 0; j <= i; j++) printf("%-3d ", Fun(i, j)); printf("\n"); } printf("\n"); } return 0; }
排列组合规律法:
第i,j列个数为C(i, j)(i>=j>=0)#include <stdio.h> #include <stdlib.h> //计算杨辉三角数 int Fun(int n, int m) { int res = 1; for(int i = 1; i <= m; i ++){ res = res * (n - i + 1) / i; } return res; } int main() { int n; while(scanf("%d", &n)){ system("cls"); printf("%d行杨辉三角:\n", n); for (int i = 0; i < n; i++) { for (int j = n - i - 1; j > 0; j--) printf(" "); for (int j = 0; j <= i; j++) printf("%-3d ", Fun(i, j)); printf("\n"); } printf("\n"); } return 0; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法