67. 两个闲玩娱乐
来源:互联网 发布:sql创建触发器语句 编辑:程序博客网 时间:2024/04/30 06:43
1.扑克牌的顺子
从扑克牌中随机抽5 张牌,判断是不是一个顺子,即这5 张牌是不是连续的。2-10 为数字本身,A 为1,J 为11,Q 为12,K 为13,而大小王可以看成任意数字。
HANDWRITING:
大小王当0,5张牌排好序
bool straight (int poker[]) {int jokers = 0, i;for (i = 0; poker[i] == 0; ++i) ++jokers;int start = poker[i];for(; i < 5; ++i) {if (poker[i] == start) ++start;else if (jokers > 0) --jokers;else return false;}return true;}
1、没有考虑到当ooker[i] != start时,i不能向后移
改正:
bool straight (int poker[]) {int jokers = 0, i;for (i = 0; poker[i] == 0; ++i) ++jokers;int start = poker[i];while (i < 5) {if (poker[i] == start) ++start, ++i;else if (jokers > 0) --jokers, ++start;else return false;}return true;}
2.n 个骰子的点数。
把n 个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S 的所有可能的值出现的概率。
HANDWRITING:
计算出各个S出现的次数,概率即S[ i ] / 6^N
void dice (int n) {int *s = new int[6 * n + 1];for (int i = 1; i <= 6; ++i) s[i] = 1;for (int c = 2; c <= n; ++c) {for (int d = c * d; d >= c ; --d) {s[d] = s[d-1] + s[d-2] + s[d-3] + s[d-4] + s[d-5] + s[d-6];}}for (int i = 1; i <= 6 * n; ++i) cout<<s[i]<<" ";cout<<endl;}
1、没考虑d-6是否大于0
2、没释放new出来的空间
改正:
void dice (int n) {int *s = new int[6 * n + 1];for (int i = 1; i <= 6; ++i) s[i] = 1;for (int c = 2; c <= n; ++c) {for (int d = c * 6; d >= c ; --d) {for (int i = 1; i < d && i <= 6; ++i)s[d] += s[d - i];}}for (int i = 1; i <= 6 * n; ++i) cout<<s[i]<<" ";cout<<endl;delete [] s;}
ANSWER:
FROM:http://blog.csdn.net/v_july_v/article/details/6870251
All the possible values includes n to 6n. All the event number is 6^n.
For n<=S<=6n, the number of events is f(S, n)
f(S,n) = f(S-6, n-1) + f(S-5, n-1) + … + f(S-1, n-1)
number of events that all dices are 1s is only 1, and thus f(k, k) = 1, f(1-6, 1) = 1, f(x, 1)=0 where x<1 or x>6, f(m, n)=0 where m<n
Can do it in DP.
void listAllProbabilities(int n) { int[][] f = new int[6*n+1][]; for (int i=0; i<=6*n; i++) { f[i] = new int[n+1]; } for (int i=1; i<=6; i++) { f[i][1] = 1; } for (int i=1; i<=n; i++) { f[i][i] = 1; } for (int i=2; i<=n; i++) { for (int j=i+1; j<=6*i; j++) { for (int k=(j-6<i-1)?i-1:j-6; k<j-1; k++) f[j][i] += f[k][i-1]; } } double p6 = Math.power(6, n); for (int i=n; i<=6*n; i++) { System.out.println(“P(S=”+i+”)=”+((double)f[i][n] / p6)); }}
- 67. 两个闲玩娱乐
- 两个闲玩娱乐 【微软面试100题 第六十七题】
- 80后个性化新娱乐:玩魔术
- 【娱乐】历史上禁玩的3个游戏
- 娱乐··相信你也玩过!
- 最近一月的娱乐生活:看电影,玩游戏
- 玩APPstore中top20的娱乐产品的一点感悟
- 娱乐
- 娱乐
- 娱乐
- 娱乐
- 娱乐.
- 娱乐
- 娱乐
- 娱乐
- 娱乐
- 两个很好玩的网站
- Java和.NET两个世界的极点:赚钱和娱乐
- 软件集成策略故事连载----构建错误是怎么来的
- zigbee 常规配置
- 目录遍历(使用第三方库)
- iOS开发者必备:六大图片、图标处理类工具
- tomcat简介
- 67. 两个闲玩娱乐
- nuc900 Nandflash格式化为VFAT,并挂载到文件系统的方法
- OCP-1Z0-053-V12.02-667题
- PyQt4 精彩实例分析* 实例15 停靠窗口
- ssh无密码验证登录
- PHP实现即时网站截图
- 24 C# 第十九章(二) 基于 .Net 4 TPL 的同步和线程处理模式
- openssh pentest技巧
- 预处理命令以“#”号开头,如包含命令#include,宏定义命令#define等