c++ - 组合数函数的计算问题

查看:134
本文介绍了c++ - 组合数函数的计算问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

一个简单的组合数计算函数,但运行结果不对,自己又看不出哪里出了问题……

#include<stdio.h>

int combi(int m, int n)
{
    int m1 = 1;//存储m!的变量
    int n1 = 1;//存储n!阶乘的变量
    int m_n1;//存储m和n之差(m-n)的变量
    int m_n2 = 1;//存储(m-n)!的变量
    int i;//计数变量
    int ans_1;//存储组合数计算结果的变量即C(m,n)

    for(i = 1; 1 <= m; i++)//m!的计算循环
        m1 = m1 * i;
    for(i = 1; 1 <= n; i++)//n!的计算循环
        n1 = n1 * i;
    m_n1 = m - n;
    for(i = 1; 1 <= m_n1; i++)//(m-n)!的计算循环
        m_n2 = m_n2 * i;

    ans_1 = m1 / (n1 * m_n2);//计算公式

    return ans_1;//返回值(组合数的计算结果)
}

int main(void)
{
    int n, r;
    int ans_2;
    printf("Please enter the n: ");//输入事件个数
    scanf("%d", &n);
    printf("Please enter the r: ");//输入组合中的事件个数
    scanf("%d", &r);
    ans_2 = combi(n, r);//使用定义函数进行计算,并将结果赋给ans_2
    //我明白这里也可以直接利用combi()进行输出,这个版本的程序是后期调试的结果……
    printf("The combination of r and n is: %d\n", ans_2);

    return 0;
}

求高人指点,感激不尽~

解决方案

for(i = 1; i <= m; i++)//m!的计算循环 , 是i <= m, 不是 1 <= m 


一种便捷方法
for(i = 1 ; i <= r; i++)
    sum = sum * (n--)/i;

这篇关于c++ - 组合数函数的计算问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆