2014-02-14 198 views
0

我必須做一個代碼,計算中獎彩票的概率,給定的數量可供選擇的數量以及您必須選擇多少。我必須在代碼中使用階乘方程(n!)/(k!*(n-k)!)。代碼本身工作正常,但公式不會編譯。概率計算器與階乘方程

//This program calculates the probability of winning the lottery 
#include <iostream> 

using namespace std; 

double factorial(int n, int k); 

int main() 
{ 
    //variables 
    int n; 
    int k; 
    char pa; 
    int chance; 
    double prob; 

    //loop 
    do 
    { 

     cout << "How many numbers (1-12) are there to pick from?\n" << endl; 
     cin >> n; 

     if(n>12 || n<1) 
     { 
      cout << "Invalid entry.\nHow many numbers (1-12) are there to pick from?\n"; 
      cin >> n; 
     } 

     cout << "How many numbers must you pick to play?\n"; 
     cin >> k; 

     if(k>n || k<1) 
     { 
      cout << "Invalid entry.\nHow many numbers must you pick to play?\n"; 
      cin >> n; 
     } 

     cout << "Your chance of winning the lottery is 1 in " << chance << endl; 
     prob=factorial(n, k); 
     cout << "This is a probability of " << prob << endl; 
     cout << "Play again?"; 
     cin >> pa; 
    } while (pa != 'n'); 

    return 0; 
} 

double factorial(int n, int k) 
{ 
    double fact; 

    fact=(n!)/(k!*(n-k)!); 
    return fact; 
} 
+0

即使您的代碼確實有效,您的函數「factorial」甚至不計算該因子。寫一個計算n的函數階乘!並在另一個函數內使用它來計算概率。你在'factorial'函數中的公式會計算一個二項式係數(如果編譯的話) – mathematician1975

+0

非C代碼...去除標籤。 – crashmstr

回答

1

沒有運算符在C++中的含義是因式運算,而您的factorial函數不計算因子。 (!該運營商通常是一個合乎邏輯的NOT操作。)

這是怎麼一會寫一個階乘方法,

int factorial(int n) { 
    return (n <= 1 ? 1 : n * factorial(n - 1)); 
} 

的方法是遞歸和整數運行 - 你可能需要考慮這是否適合您的任務

然後您的原始功能應重新命名沿double choice(int n, int k)行和使用新的factorial工具ntation。

0

您不能寫n!,並期望它計算n的階乘。

變化fact=(n!)/(k!*(n-k)!)fact=f(n)/(f(k)*f(n-k)),並添加以下功能:

unsigned long long f(int n) 
{ 
    unsigned long long res = 1; 
    while (n > 1) 
    { 
     res *= n; 
     n--; 
    } 
    return res; 
} 

順便說一句,你有你的代碼中的其他幾個問題:

  1. 您正在使用可變chance沒有初始化它。

  2. 功能factorial不返回概率,但是不同選擇的數量。這是一個整數值,您不妨使用unsigned long long而不是double。概率是該值的倒數(1/value),所以您應該相應地更改打印的消息。