簡體   English   中英

C程序,用於計算從n個不同對象中選擇k個對象的方法數。 'k'和'n'都是整數

[英]C program to calculates the number of ways to choose k objects from n distinct objects. 'k' and 'n' both are integers

我編寫了一個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)

怎么避免呢?

問題出在這一行

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 。檢查出。

兩個問題:

  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程序將出錯。 這是壞的! 我希望這可以幫到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM