十面骰子、

十面骰子(一):

v 有一个十面的骰子,每一面分别为1-10,不断投掷骰子,投10000次,统计每一面1-10出现的次数或概率.

v 提示:可用rand()产生1-10之间的随机数,再统计1-10出现的机会,存放于数组里,如count[1]存放点数为1的次数,如count[2]存放点数为2的次数

十面骰子(二):

v 有一个十面的骰子,每一面分别为1-10,不断投掷骰子,直到骰子上的数累计和超过100停止,问这个和最可能的是哪个数?平均要投掷多少次?

v 玩一次游戏:

v 需要多次抛掷,直到点数和超过100.

v 十面的骰子,每次抛得的点数:p=rand()%10+1

v 累加和点数:sum = sum +p

v if sum>100 stop 抛掷

v 求sum 以及得到这个sum所抛掷的次数

v 以上游戏反复10000次。

分析:

10000次游戏结束后:

统计所得到点数的和的次数?sum可能的结果范围是101-110.可定义一个sum[110](也可定义两个数组分别存放抛到和的次数和抛到和所用的次数),数组元素sum[101]表示在10000次中,抛掷得到点数和为101的次数,sum[110]表示在10000次中,抛掷得到点数和为110的次数……

得到点数和超过100这样的结果,要投掷多少次?可能投掷的次数范围是11-101次,也可用数组来存放,如数组元素sum[11]表示抛掷了11次就得到和超过100,在10000次游戏中,有多少次?

(一)代码

#include 
#include 
#include 
using namespace std;
int main()
{
	int count[11] = { 0 };
	int i;
	srand((unsigned)time(NULL));
	for (i = 1; i <= 10000; i++)
	{
		count[rand() % 10 + 1]++;
	}
	for (i = 1; i <= 10; i++)
	{
		cout << "投到面" << i << "的次数是:" << count[i] << endl;
		//cout << "投到面" << i << "的概率是:" << count[i] / 10000;
		//cout << endl;
	}
	return 0;
}

 (二)代码

#include 
#include 
#include 
#include 
using namespace std;
int main()
{
	int count[102] = { 0 }, Sum[111] = { 0 };     //count[102]用来装10000次游戏每次要投掷到累积点数超过100的次数,Sum[111]用来装10000次游戏每次投掷后累积点数超过100后的具体累积点数
	int i,p,sum,n;                 //sum是一次游戏的累积点数,n是一次游戏的投掷次数             
	srand((unsigned)time(NULL));
	for (i = 1; i <= 10000; i++)       //重复10000次游戏
	{
		sum = 0, n = 0;
		while (1)
		{
			p = rand() % 10 + 1;
			sum += p;
			n++;
			if (sum > 100)break;
		}
		count[n]++;
		Sum[sum]++;
	}
	cout << "统计所得到的点数的和的次数?" << endl;
	for (i = 101; i <= 110; i++)
	{
		cout << "累积点数和为 " << i << " , 投到该点数和的次数为 " << Sum[i] << endl;
	}
	cout << endl;
	cout << "得到点数和超过100这样的结果,要投掷多少次?" << endl;
	cout << " 得到点数和超过100时投掷的次数     " << "投掷了该次数点数和才超过100的游戏次数" << endl;
	for (i = 11; i <= 101; i++)
	{
		cout <

你可能感兴趣的:(ACM作业,算法,c++)