m面骰子投掷n次,求最大的点的期望值
来源:互联网 发布:植物精灵for mac 编辑:程序博客网 时间:2024/05/02 00:30
/*骰子一共有m个面,第一面有一个点,第二面有两个点,以此类推,第m个面有m个点。
Twilight Sparkle很清楚的知道,每当她丢一次骰子,都有可能随机出现其中的一个面。
并且她还知道,每次扔出的概率都是独立的。现在请你帮助她计算下,当她扔出n次骰子后,所得的最大的点的预期值是多少?
输入值:包含2个整数,m和n (1 ≤ m, n ≤ 105)。
输出值:输出的结果对应于最大的点的预期值,结果误差在10-4范围内都视为正确答案。
示例,比如在假定m=2,n=2的情况下(即骰子只有两面,扔2次的情况):
你第一次扔了1个1,第二次扔了1个2,最大结果为2。
你第一次扔了1个1,第二次扔了1个1,最大结果为1。
你第一次扔了1个2,第二次扔了1个1,最大结果为2。
你第一次扔了1个2,第二次扔了1个2,最大结果为2。
由于出现上述四种情况的概率都为0.25,那么预期值为
(2 + 1 + 2 + 2)* 0.25 = 7/4
*/
#include<iostream>
int m;//骰子的面数
int n;//投掷的次数
public:
Dice(){
cout << "请输入骰子的面数:";
cin >> this->m;
cout << "请输入投掷的次数:";
cin >> this->n;
}
int getm(){ return this->m; }//获得投掷的面数
int getn(){ return this->n; }//获得投掷的次数
double E = 1;//最后一次掷得得值为m
if (n != 1){//不止掷一次
for (int i = 1; i < max; i++){
E += (1.0 / m)*Expect(m, n - 1, max);//最后一次掷得的骰子数为1--max
}
for (int j = max; j < m; j++){
E += (1.0 / m)*Expect(m, n - 1, j);//最后一次掷得的骰子数为max--m-1
}
}
else{//掷一次,这也是给递归赋了一个初值
for (int i = 1; i < max; i++){
E += (1.0 / m)*max;
}
for (int j = max; j < m; j++){
E += (1.0 / m)*j;
}
}
return E;
}
int main(){
Dice d;
cout<<Expect(d.getm(), d.getn(), 1);
cout << endl;
return 0;
}
Twilight Sparkle很清楚的知道,每当她丢一次骰子,都有可能随机出现其中的一个面。
并且她还知道,每次扔出的概率都是独立的。现在请你帮助她计算下,当她扔出n次骰子后,所得的最大的点的预期值是多少?
输入值:包含2个整数,m和n (1 ≤ m, n ≤ 105)。
输出值:输出的结果对应于最大的点的预期值,结果误差在10-4范围内都视为正确答案。
示例,比如在假定m=2,n=2的情况下(即骰子只有两面,扔2次的情况):
你第一次扔了1个1,第二次扔了1个2,最大结果为2。
你第一次扔了1个1,第二次扔了1个1,最大结果为1。
你第一次扔了1个2,第二次扔了1个1,最大结果为2。
你第一次扔了1个2,第二次扔了1个2,最大结果为2。
由于出现上述四种情况的概率都为0.25,那么预期值为
(2 + 1 + 2 + 2)* 0.25 = 7/4
*/
#include<iostream>
using namespace std;
int m;//骰子的面数
int n;//投掷的次数
public:
Dice(){
cout << "请输入骰子的面数:";
cin >> this->m;
cout << "请输入投掷的次数:";
cin >> this->n;
}
int getm(){ return this->m; }//获得投掷的面数
int getn(){ return this->n; }//获得投掷的次数
};//并没有必要写类,脑洞有点大
double E = 1;//最后一次掷得得值为m
if (n != 1){//不止掷一次
for (int i = 1; i < max; i++){
E += (1.0 / m)*Expect(m, n - 1, max);//最后一次掷得的骰子数为1--max
}
for (int j = max; j < m; j++){
E += (1.0 / m)*Expect(m, n - 1, j);//最后一次掷得的骰子数为max--m-1
}
}
else{//掷一次,这也是给递归赋了一个初值
for (int i = 1; i < max; i++){
E += (1.0 / m)*max;
}
for (int j = max; j < m; j++){
E += (1.0 / m)*j;
}
}
return E;
}
int main(){
Dice d;
cout<<Expect(d.getm(), d.getn(), 1);
cout << endl;
return 0;
}
0 0
- m面骰子投掷n次,求最大的点的期望值
- n个m面骰子,投掷100次结果统计
- n个m面骰子的点数问题
- 面试题系列-整数数组长度为n,分为m份使各份的和相等,求最大的m
- N个M面骰子,点数和的概率分布[待学习]
- 求n个骰子点数的和
- 求n个骰子的点数
- n个元素求m个最大的元素
- c现代编程 模拟投掷骰子的游戏
- 每隔五秒执行一次 共十次 模拟骰子的投掷
- 模拟投掷骰子,一至六点出现的次数…
- 投掷骰子
- 用m-1维空间n次分割m维空间得到的最大m维区域数目
- 求m,n的最大公约数
- 求m的n次方
- NYOJ 746 - 正整数n划分为m段,求m段的最大乘积 【区间DP】
- 求m的n次幂函数pow的简单写法!
- LintCode:M-x的n次幂
- Androi学习:Camera初探——控制摄像头拍照
- ZOJ 3844Easy Task(暴力)
- leetcode之Longest Substring Without Repeating Characters
- c语言指针集合
- 蓝桥杯预赛赛后感想
- m面骰子投掷n次,求最大的点的期望值
- ZOJ 3870Team Formation(位运算)
- 通过反射RDD2DataFrame
- eclipse che安装教程
- 对泛型编程中泛型类型的一些理解
- Ubuntu 12.04 安装Scrapy爬虫框架
- Android中匹配器ArrayAdapter加载List显示顺序
- Java - Collection
- Python-序列化