剑指offer面试题43:n个筛子的点数
题目描述:
把n个筛子扔在地上,所有筛子朝上的一面点数之和为s,输入n,打印出s的所有可能的值出线的概率。
书上给了两种解法,第一种递归的方法由于代码太乱,没有看懂=。=
第二种方法很巧妙,lz已经根据书上的算法将其实现。
第二种算法思路如下:考虑两个数组来存储骰子点数的每一个总数出线的次数,在一次循环中,第一个数组中的第n个数字表示骰子和为n的出现的次数,在下次循环中,我们加上一个新的骰子,此时和为n的骰子出现的次数应该等于上次循环中骰子点数为n-1,n-2,n-3,n-4,n-5,n-6次数的总和,所以我们把另一个数组的第n个数字设为前一个数对应的第n-1,n-2,n-3,n-4,n-5,n-6之和,以此可以写出如下的代码,思路很清晰。

2 #include<math.h>
3 using namespace std;
4 void probability(int n)
5 {
6 int i,j,k,temp,max = 6*n,temp1[6*n+1],temp2[6*n+1];
7 for(j=0;j<6*n+1;j++)
8 {
9 temp1[j] = 0;
10 temp2[j] = 0;
11 }
12 for(j=1;j<7;j++)
13 {
14 temp1[j] = 1;
15 }
16 int flag = 0;
17 for(j = 2;j <= n;j++)//n dices to go
18 {
19 if(flag == 0)//对temp2进行操作
20 {
21 for(k = j;k < j * 6 + 1;k++)
22 {
23 temp = 1;
24 while((temp <= 6) && (k > temp))
25 {
26 //cout <<k <<" " << k-temp <<" " <<temp1[k-temp] << endl;
27 temp2[k] += temp1[k-temp];
28 temp++;
29 //cout << k <<endl;
30 }
31 }
32 flag = 1;
33 continue;//跳过剩下的循环
34 }
35 else if(flag == 1)//对temp1进行操作
36 {
37 for(k = j ;k < j * 6 + 1;k++)
38 {
39 temp = 1;
40 while((temp <= 6) && (k >temp) )
41 {
42 temp1[k] += temp2[k-temp];
43 temp++;
44 }
45 cout << "temp1[" << k <<"] " <<temp1[k] << endl;
46 }
47 flag = 0;
48 }
49 }
50 double total = pow((double)6,n);
51 if(flag == 0)
52 {
53 for(i = n;i< 6*n + 1 ;i++)
54 {
55 cout <<i<<"'s\t probability is:\t" <<((double)temp1[i])/total <<endl;
56 }
57 }
58 else
59 {
60 for(i = n;i< 6*n + 1 ;i++)
61 {
62 cout <<i<<"'s\t probability is:\t" <<((double)temp2[i])/total<<endl;
63 }
64 }
65 }
66
67 int main()
68 {
69 int n;
70 cin >> n;
71 int i;
72 probability(n);
73 system("pause");
74
75 return 0;
76 }

剑指offer面试题43:n个筛子的点数的更多相关文章
- 剑指offer 面试题43. 1~n整数中1出现的次数
leetcode上也见过一样的题,当时不会做 看了一下解法是纯数学解法就没看,结果剑指offer上也出现了这道题,那还是认真看下吧 对于数字abcde,如果第一位是1,比如12345,即计算f(123 ...
- 剑指Offer面试题43(Java版):n个骰子的点数
题目:把n个骰子仍在地上.全部骰子朝上一面的点数之和为s,输入n,打印出s的全部可能的值出现的概率. 解法一:基于递归求骰子的点数,时间效率不够高 如今我们考虑怎样统计每个点数出现的次数. 要向求出n ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
随机推荐
- 分布式系统ID生成办法
前言 一般单机或者单数据库的项目可能规模比较小,适应的场景也比较有限,平台的访问量和业务量都较小,业务ID的生成方式比较原始但是够用,它并没有给这样的系统带来问题和瓶颈,所以这种情况下我们并没有对此给 ...
- codevs 1487 大批整数排序(水题日常)
时间限制: 3 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description !!!CodeVS开发者有话说: codevs自从换了评测机,新评测机的内存计算 ...
- HDU 6052 To my boyfriend(容斥+单调栈)
题意:对于一个n*m的方格,每个格子中都包含一种颜色,求出任意一个矩形包含不同颜色的期望. 思路: 啊啊啊啊啊,补了两天,总算A了这道题了,简直石乐志,前面的容斥还比较好写,后面的那个>13那个 ...
- urllib基础-利用网站结构爬取网页-百度搜索
有的时候爬取网页,可以利用网站额结构特点爬取网页 在百度搜索框中输入搜索内容,单击搜索,浏览器会发送一个带有参数的url请求.尝试删除其中的一些参数,只剩下wd这个参数.发现wd是搜索内容.这样程序可 ...
- python基础一 day11 装饰器复习
# 复习# 讲作业# 装饰器的进阶 # functools.wraps # 带参数的装饰器 # 多个装饰器装饰同一个函数# 周末的作业 # 文件操作 # 字符串处理 # 输入输出 # 流程控制 # 装 ...
- 四、绘图可视化之Seaborn
Seaborn-Powerful Matplotlib Extension seaborn实现直方图和密度图 import numpy as np import pandas as pd import ...
- python爬虫---实现项目(三) Selenium分析美团美食
上一期博客,我本来想爬取美团美食的,但是由于请求头太复杂,没有破解开其中的几个参数,所以放弃,这次我们来用selenium来模式浏览器抓取数据,我们先来简单看一下流程: 1,利用selenium驱动浏 ...
- Luogu P3627 抢掠计划
题目传送门 \(Tarjan\)缩点+SPFA最长路 #include<iostream> #include<cstdio> #include<cstring> # ...
- 开源 java 电商系统
shop++是基于spring.springmvc等主流框架开发,参考资料比较全面,上手容易: 比 javashop 代码可读性好. 适合二次开发 6.broadleaf基于spring.Spring ...
- shell脚本,配置文件加载顺序,以及什么时候加载。
在linux系统中,有/etc/profile,/etc/bashrc ,~/.bash_profile,~/bashrc这四个配置文件,这些文件,会自动的在某些时候加载,也就是点一下,一般都是些别名 ...