我正在尝试为以下公式制作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输出为空白,我的choose()输出为0000000000000000000000
任何帮助将不胜感激
答案 0 :(得分:0)
从您的计划中选择&#39;从main调用并且没有给出返回值。请注意你的&#39; k&#39;因为来自while循环,它总是等于零。它首先检查k是否等于零并返回1.(注意,没有变量可以将返回值放入。)然后调用&#39;选择&#39;从二项分布。(注意你没有改变k的值。它总是零!。)。(注意你在程序中调用了两次)
答案 1 :(得分: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
标志
答案 2 :(得分:0)
您可以使用temmplate编程,以便您编写更少的锅炉代码
#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;
}
输出:
二项式&lt; 10,1&gt; = 10
二项式&lt; 8,3&gt; = 56