组合数函数的计算问题

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

#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;
}

求高人指点,感激不尽~

阅读 4.4k
1 个回答
for(i = 1; i <= m; i++)//m!的计算循环 , 是i <= m, 不是 1 <= m 

一种便捷方法
for(i = 1 ; i <= r; i++)
    sum = sum * (n--)/i;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题