C语言:for循环解决组合数问题
前言:从 n 个不同元素中每次取出 m 个不同元素
,不管其顺序合成一组,称为从 n 个元素中不重复地选取 m 个元素的一个组合。所有这样的组合的种数称为组合数。
那么我们如何用C语言进行运算呢?
解题思路: 首先要清楚阶乘定义,所谓 n 的阶乘,就是从 1 开始乘以比前一个数大 1 的数 一直乘到 n,用公式表示就是:1×2×3×4×…×(n-2)×(n-1)×n=n!
具体步骤:(以单个阶乘为例)利用循环,设循环变量为 i,初值为 1,i 从 1 变化到 m,依次让 i 与 sum_1 相乘,并将乘积赋给 sum_1
1.定义变量 sum_1,并赋初值 1 2.i 自增 1 3.直到 i 超过 m
#include<stdio.h> int main() { /*思路 首先要清楚阶乘定义,所谓 n 的阶乘,就是从 1 开始乘以比前一个数大 1 的数 一直乘到 n,用公式表示就是:1×2×3×4×…×(n-2)×(n-1)×n=n! */ /*具体操作 (以m!为例) 利用循环,设循环变量为 i,初值为 1,i 从 1 变化到 m 依次让 i 与 sum_1 相乘,并将乘积赋给 sum_1 1.定义变量 sum_1,并赋初值 1 2.i 自增 1 3.直到 i 超过 m */ int m,n; int i,j,k; double sum_1,sum_2,sum_3; sum_1=sum_2=sum_3=1; double x; scanf("%d %d",&m,&n); for(i=1;i<=m;i++) { sum_1=sum_1*i;//求m的阶乘 for(j=1;j<=n;j++) sum_2=sum_2*j;//求n的阶乘 for(k=1;k<=(m-n);k++) sum_3=sum_3*k;//求m-n的阶乘 } //为什么嵌套循环:题目说明了 m > = n > = 0,所以m 做外循环,n以及m-n 做内循环,分别去对应值 x=sum_1/(sum_2*sum_3);//题目要求的最终计算 printf("%.0lf",x); }