калькулятор вероятностей с факториальным уравнением

Я должен сделать код, который вычисляет вероятность выигрыша в лотерее, учитывая количество номеров, из которых вы можете выбирать, и сколько вы должны выбрать. Я должен использовать факториальное уравнение (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

Решение

Здесь нет ! оператор в C ++ в смысле факториальной операции, и ваш factorial функция не вычисляет факториал. (The ! Оператор, как правило, логичный НЕ оператор).

Вот как можно написать факторный метод,

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

Этот метод является рекурсивным и работает с целыми числами — возможно, вам придется подумать, подходит ли он для вашей задачи

Тогда ваша оригинальная функция должна быть переименована в соответствии с double choice(int n, int k) и использовать новый factorial реализация.

1

Другие решения

Вы не можете написать 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), поэтому вы должны соответствующим образом изменить напечатанное сообщение.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector