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);
}
经验分享 程序员 微信小程序 职场和发展