这道题,要完成之前,我买先来看下程序清单7.4的问题:获奖的概率
问题跑出来了。下面我们看这个问题的解决办法。
#pragma region calling.cpp 7.4
/*
*/
#if 1
#include <iostream>
// Note: some implementations require double instead of long double
long double probability(unsigned numbers, unsigned picks);
int main()
{
using namespace std;
double total, choices;
cout << "Enter the total number of choices on the game card and\n"
"the number of picks allowed:\n";
while ((cin >> total >> choices) && choices <= total)
{
cout << "You have one chance in ";
cout << probability(total, choices); // compute the odds
cout << " of winning.\n";
cout << "Next two numbers (q to quit): ";
}
cout << "bye\n";
// cin.get();
// cin.get();
return 0;
}
// the following function calculates the probability of picking picks
// numbers correctly from numbers choices
long double probability(unsigned numbers, unsigned picks)
{
long double result = 1.0; // here come some local variables
long double n;
unsigned p;
for (n = numbers, p = picks; p > 0; n--, p--)
result = result * n / p;
return result;
}
#endif
#pragma endregion
请注意,增加游戏卡中可供选择的数字数目,获奖的可能性将急剧降低。
看完上面的问题,回到我们这个作业上来
/
4.许多州的彩票发行机构都使用如程序清单 7.4所示的简单彩票玩法的变体。
在这些玩法中,玩家从一组被称为域号码(feldnumber)的号码中选择几个。
例如,可以从域号码147中选择5个号码;还可以从第二个区间(如127)选择一个号码(称为特选号码)。
要赢得头奖,必须正确猜中所有的号码。
中头奖的几率是选中所有域号码的几率与选中特选号码几率的乘积。
例如,在这个例子中,中头奖的几率是从47个号码中正确选取5个号码的几率与从27个号码中正确选择1个号码的几率的乘积。
请修改程序清单 7.4,以计算中得这种彩票头奖的几率。
/
所以如果程序7.4能搞定。这个作业的问题就化解为A*B的问题了。
那我们上代码看下
#pragma region 4.cpp 7.4
#if 1
#include <iostream>
// Note: some implementations require double instead of long double
long double probability(unsigned numbers, unsigned picks);
long double AB(long double a,long double b);
int main()
{
using namespace std;
unsigned total, choices;
long double a, b;
cout << "请选择你的域号码(1~47):\n";
cin >> choices;
a = probability(47, choices);
cout << "请选择你的特选号码(1~27):\n";
cin >> choices;
b = probability(27, choices);
cout<<"中奖的概率为:" <<fixed<< AB(a, b)<<"分之一\n";
cout << "bye\n";
return 0;
}
// the following function calculates the probability of picking picks
// numbers correctly from numbers choices
long double probability(unsigned numbers, unsigned picks)
{
long double result = 1.0; // here come some local variables
long double n;
unsigned p;
for (n = numbers, p = picks; p > 0; n--, p--)
result = result * n / p;
return result;
}
long double AB(long double a, long double b)
{
return a * b;
}
#endif
#pragma endregion
程序说明:
1,增加了一个函数AB求两个数的乘积的。
2,fixed修改cout输出的数据格式