C程序,用于计算从n个不同对象中选择k个对象的方法数。 'k'和'n'都是整数

时间:2015-07-28 13:05:00

标签: c algorithm function combinations coredump

我写了一个C程序来计算使用函数从n个不同对象中选择k个对象的方法的数量。

    #include<stdio.h>
    long f(int a)
    {
     if(a==1||a==0)return(0);
     else return(a*f(a-1));
    }

    int combination(int N,int K)
    {
     long int NF,KF,NMKF;
     NF=f(N);
     KF=f(K);
     NMKF=f(N-K);
     return(NF/(KF*NMKF));

    }
    int main()
    {
     int n,k;
     scanf("%d%d",&n,&k);
     combination(n,k);
    }

但编译器显示以下错误消息

floating point exception (core dumped)

如何避免它?

2 个答案:

答案 0 :(得分:12)

问题出在这一行

if(a==1||a==0)return(0);

应该是

if(a==1||a==0)return(1);

计算阶乘,n*(n-1)*(n-2)...*(2)*(1)。最后请注意,我们乘以1而不是零。与0相乘会产生阶乘0。后来当你进行分割时,0出现在分母中,floating point exception正在发生。这就是你的程序出错的原因。

对于需要0的阶乘的情况。然后这也可行,因为0的阶乘为1且 0。请检查this

答案 1 :(得分:3)

两个问题:

  1. if(a==1||a==0)您应该return 1,而不是return 0。因为1!=1, 0!=1
  2. 您的意图是choose k objects from n distinct objects。但是你应该添加参数检查以便不发生n<k。如果我们输入n=2, k=3。程序将会出错。这是坏的! 我希望这可以帮到你。