面试题43:n个骰子的点数(《剑指offer》)
2015-09-25 16:45
330 查看
需要再自己写一遍代码的题
参考思路http://www.cnblogs.com/AndyJee/p/4686208.html
把n个骰子仍在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
s可能出现的值的范围为:n--6*n
1、全排列
回溯法枚举n个骰子(6面)的全排列,然后计算每一次排列所有值的和,并统计该和的出现的次数,除以6^n(全排列的全部可能性),即为概率。(这里就不列出代码)
2、递归思想
通过递归的思想将n个骰子的点数累加。
要求出n个骰子的点数和,可以先求出前n-1个骰子的点数和,然后加上第n个骰子的点数;
递归结束条件:n=1,此时某个点数和出现的次数+1;
3、动态规划思想
假设f(m,n)表示投第m个骰子时,点数之和n出现的次数,投第m个骰子时的点数之和只与投第m-1个骰子时有关。
递归方程:f(m,n)=f(m-1,n-1)+f(m-1,n-2)+f(m-1,n-3)+f(m-1,n-4)+f(m-1,n-5)+f(m-1,n-6),表示本轮点数和为n出现次数等于上一轮点数和为n-1,n-2,n-3,n-4,n-5,n-6出现的次数之和。
初始条件:第一轮的f(1),f(2),f(3),f(4),f(5),f(6)均等于1.
1、递归方法
2、动态规划
参考思路http://www.cnblogs.com/AndyJee/p/4686208.html
题目:
把n个骰子仍在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
思路:
s可能出现的值的范围为:n--6*n1、全排列
回溯法枚举n个骰子(6面)的全排列,然后计算每一次排列所有值的和,并统计该和的出现的次数,除以6^n(全排列的全部可能性),即为概率。(这里就不列出代码)
2、递归思想
通过递归的思想将n个骰子的点数累加。
要求出n个骰子的点数和,可以先求出前n-1个骰子的点数和,然后加上第n个骰子的点数;
递归结束条件:n=1,此时某个点数和出现的次数+1;
3、动态规划思想
假设f(m,n)表示投第m个骰子时,点数之和n出现的次数,投第m个骰子时的点数之和只与投第m-1个骰子时有关。
递归方程:f(m,n)=f(m-1,n-1)+f(m-1,n-2)+f(m-1,n-3)+f(m-1,n-4)+f(m-1,n-5)+f(m-1,n-6),表示本轮点数和为n出现次数等于上一轮点数和为n-1,n-2,n-3,n-4,n-5,n-6出现的次数之和。
初始条件:第一轮的f(1),f(2),f(3),f(4),f(5),f(6)均等于1.
代码:
1、递归方法相关文章推荐
- 黑马程序员————二分法查找数组
- Java线程面试题 Top 50
- 面试---传递动态内存
- 黑马程序员-反射篇
- Java面试题和解答(二)
- 求职准备
- 程序员技术练级攻略
- Ios 关于Block循环引用的面试题
- 设计模式 模版方法模式 展现程序员的一天
- 黑马程序员----C 语言学习笔记之二维数组的存储和应用(迷宫小游戏)
- 黑马程序员——Java基础---多线程
- 黑马程序员——基础知识——语句结构
- 关于ArrayList的5道面试题
- 黑马程序员—java技术blog—第七篇集合整体基础框架概述
- 黑马程序员---java基础----String类
- 【.Net码农】List<T> 类
- [.Net码农].Net中的json操作类
- 黑马程序员---java高新技术----反射技术
- 黑马程序员—java技术blog—第六篇面向对象_多态概述及基础应用
- 程序员必备技能与习惯