织梦网站广告代码如何写,python 如何做网站,西湖区住房和城乡建设局网站,wordpress添加vip用户组前言 在上一期博客中我们分享了一般的排列组合算法#xff08;没看的话点这里哦~#xff09;#xff0c;但是缺点很明显#xff0c;没法进行取模运算#xff0c;而且计算的范围十分有限#xff0c;而今天分享的排列组合升级版算法能够轻松解决这些问题#xff0c;话不多…前言 在上一期博客中我们分享了一般的排列组合算法没看的话点这里哦~但是缺点很明显没法进行取模运算而且计算的范围十分有限而今天分享的排列组合升级版算法能够轻松解决这些问题话不多说让我们开始今天的学习吧
代码实现 首先我们需要知道这这些公式 C(n,k) C(n-1,k) C(n-1,k-1) (C(n,k)指从n个元素中选择k个元素的方式数) A(n,k) (n-k)! * c(n,k) 知道了这个公式我们就可以设置数组C[I][J]表示C(I,J),数组A[I][J]表示A(i,j),数组f[i]表示i递推公式求得排列组合的值初始化时当j为0时c[i][j]赋值为1表示从i个元素中选择0个元素只有一种方式否则c[i][j] c[i-1][j] c[i-1][j-1]表示根据递推关系式计算组合数。其次通过循环计算阶乘。阶乘f(n)表示从1到n的连续整数的乘积即n!。最后通过组合数和阶乘的结果来计算排列数。 代码如下
#includestdio.h
#define mod 1000000007//模数
int C[1145][1145];//组合
long long F[1145];//结成
int A[1145][1145];//排列
void combination(int n)
{for (int i 0; i n; i)//当j 0时直接初始化为1{C[i][0] 1;}for (int i 1; i n; i)//递推公式求组合数{for (int j 1; j i; j){C[i][j] (C[i - 1][j] C[i - 1][j - 1]) % mod;}}
}
void factorial(int n)
{F[0] 1;for (int i 1; i n; i)//求结成{F[i] F[i - 1] * i % mod;}
}
void permutation(int n)
{for (int i 0; i n; i)//递推公式求排列数{for (int j 0; j i; j){A[i][j] F[i - j] * C[i][j] % mod;}}
}
int main()
{
int n 1145;combination(n);factorial(n);permutation(n);return 0;
}这就是升级版的排列组合算法以后在遇见这中类型题想必小伙伴们能够信手捏来如果觉得博主讲得不错的话千万不要忘记给博主一个关注点赞收藏鼓励一下哦~我们下期再见