主要是杨辉三角的公式转化为代码。杨辉三角同样是很难求,这个难在数学上而不是代码上。
C(n-1,m-1)=(n-1)!/(n-m)!/(m-1)!杨辉三角每行每个数的值,n是行,m是个
coef = coef * (i - j + 1) / (j - 1);
前面这两个公式乍一看其实也看不出什么关联
推导过程大致如下:
//A(n,m)= m x(m - 1)x(m - 2)x(m - 3)x ... x(m - n + 1)=m!/(m-n)!
//C(4,8)=A(4,8)/A(4,4)=8!/4!/4!
//C(n-1,m-1)=(n-1)!/(n-m)!/(m-1)!杨辉三角每行每个数的值,n是行,m是个
//然后分别求,n行m个,和n行m1个的表达式,m1等于m+1,
//然后利用n行m个的值、n、m1这三个值表达出n行m1个的值
//再写入代码中,这个是数学过程,没有办法看代码看懂
#define _CRT_SECURE_NO_WARNINGS// 取消有关使用不安全函数的编译器警告
#include <stdio.h>// 包含标准输入输出库
int main()
{// 定义变量:行数,系数,空格数,循环变量i和jint rows, coef = 1, space, i, j;printf("行数: ");// 提示用户输入行数scanf("%d", &rows);// 读取用户输入的行数// 外循环控制行数,从1到rowsfor (i = 1; i <= rows; i++){// 内循环控制前导空格的数量for (space = 1; space <= rows - i + 1; space++)printf(" ");// 打印两个空格// 内循环打印杨辉三角形的每个数for (j = 1; j <= i; j++){if (j == 1 || i == 1){coef = 1;// 每行第一个元素和第一行的元素都为1}else{// 根据公式计算杨辉三角形的系数coef = coef * (i - j + 1) / (j - 1); }printf("%4d", coef);// 打印系数,宽度为4}printf("\n");// 每行结束后换行}return 0;// 程序结束}//A(n,m)= m x(m - 1)x(m - 2)x(m - 3)x ... x(m - n + 1)=m!/(m-n)!
//C(4,8)=A(4,8)/A(4,4)=8!/4!/4!
//C(n-1,m-1)=(n-1)!/(n-m)!/(m-1)!杨辉三角每行每个数的值,n是行,m是个
//然后分别求,n行m个,和n行m1个的表达式,m1等于m+1,
//然后利用n行m个的值、n、m1这三个值表达出n行m1个的值
//再写入代码中,这个是数学过程,没有办法看代码看懂
输出结果
行数: 711 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1