алгоритм — C ++ Binomial Distribution

Я пытаюсь сделать программу на C ++ по следующей формуле:

введите описание изображения здесь

Я сделал выбор части функции:

#include <iostream>
#include <fstream>
using namespace std;int choose();
void binomialdistribution();

int main(){
choose();
binomialdistribution();
}

int choose() {
double n = 3;
double k = 0;
double i;
double b;
double value;
while (k <= n){
if (0 == k || n == k) {
return 1;
}
if (k > n) {
return 0;
}
if (k > (n - k)) {
k = n - k;
}
if (1 == k) {
return n;
}
b = 1;
for (i = 1; i <= k; ++i) {
b *= (n - (k - i));
if (b < 0){
return -1;
}
b /= i;
}
return b;
cout << k;
k++;
binomialdistribution();
}
}

void binomialdistribution(){
cout << choose();
}

Мой вывод для k пуст, а мой выбор () — 0000000000000000000000

Любая помощь будет оценена

2

Решение

Из вашей программы «выбор» вызывается из main, а возвращаемое значение не дается. Плюс, ваш «k» всегда будет равен нулю, потому что из цикла while. Сначала он проверяет, равен ли k нулю, и возвращает 1. (Обратите внимание переменная для ввода возвращаемого значения отсутствует.) Затем вызывается метод «выбрать» из биномиального распределения. (Обратите внимание, что вы не изменили значение k.Это всегда будет НОЛЬ!). (Обратите внимание, что в программе вы вызывали команду «Выбрать дважды»). )

0

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

Попробуй это

#include <cmath>
#include <stdio.h>

int main(){
double p;
int k;
int n;

scanf("%d%d", &n, &k);
scanf("%lf", &p);

if (k > n) return 1;
if (p > 1 || p < 0) return 1;

double w = 1;   //neutral element of multiplication

// n choose k part
for (int i = n - k + 1; i <= n; ++i) w = w * i;
for (int i = 1; i <= k; ++i) w = w / i;

// p^k * (1-p)^(n-k) part
w = w * pow(p, k) * pow(1.0 - p, n - k);

printf("%lf\n", w);
return 0;
}

спросите, если что-то не понятно.

Также не забудьте собрать с -lm флаг

0

Вы можете использовать программирование темпаля, которое позволит вам писать меньше кода котла.

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>    // std::sort
using namespace std;template <unsigned int N, unsigned int K>
struct Binomial
{
enum
{
value=Binomial<N-1,K-1>::value + Binomial<N-1,K>::value
};
};

template <unsigned int N>
struct Binomial<N,0>
{
enum
{
value=1
};
};

template <unsigned int N>
struct Binomial<N,N>
{
enum
{
value=1
};
};int main(void)
{
std::cout<<" Binomial<10,1> = ";
std::cout<< Binomial<10,1>::value;
std::cout<< std::endl;

std::cout<<" Binomial<8,3> = ";
std::cout<< Binomial<8,3>::value;
std::cout<< std::endl;
}

Выход:

бином<10,1> = 10

бином<8,3> = 56

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