C++Primer Plus第七章函数---C++编程 7.3练4 关于彩票获奖的概念的问题

这道题,要完成之前,我买先来看下程序清单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输出的数据格式

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值