【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ
- 题目描述:
-
六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工。为了增添一点趣味性,他还准备了一些不同类型的骰子,打算以掷骰子猜数字的方式发放奖品。例如,有的骰子有6个点数(点数分别为1~6),有的骰子有7个(点数分别为1~7),还有一些是8个点数(点数分别为1~8) 。他每次从中拿出n个同一类型的骰子(假设它们都是拥有m个点数并且出现概率相同)投掷,然后让员工在纸上按优先级(从高到低)的顺序写下3个数上交,表示他们认为这些骰子最有可能的点数之和是多少。第一个数就猜对的人,是一等奖;第二个数才猜对的人是二等奖;如果三个数都不是正确答案,别灰心!YZ还准备了很多棒棒糖。ZL很聪明,他想了想,打算把概率(以保留两位小数的概率计)最高的三个数找出来,如果有概率相同,则选择其中点数和最小的那个数。你觉得ZL会依次写下哪三个数?
- 输入:
-
输入有多组数据。
每组数据一行,包含2个整数n(0<=n<=10),m(6<=m<=8),n表示YZ拿出的骰子数,m表示骰子拥有的点数。如果n=0,则结束输入。
- 输出:
-
对应每组数据,输出ZL最可能依次写下的点数,以及其对应的概率值。概率值按4舍5入要求保留2位小数。每组数据之间空一行,注意:最后一组数据末尾无空行。
样例输入:
1 6
4 6
3 7
0
样例输出:
1 0.17
2 0.17
3 0.17 13 0.11
14 0.11
15 0.11 12 0.11
10 0.10
11 0.10
【解题思路】本题的概率等于次数除以总的次数,所以,我们可以记录次数,这样更加简单。然后,我们发现每投掷一次得到的次数,都与前面几次有关系,所以我们可以总结该问题为dp问题。
我们可以设aa[i][j]代码投掷i次,得到总和为j的次数。那么aa[i][j]+=aa[i-1][j-k],其中k为第i次单个骰子的出现的点数,j为之前所出现的点数。建立dp连接式我们可以很快得到结果。当然最后我们需要先算出四舍五入的概率后再排序。
AC code:
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std; struct st
{
int idx,val;
double vl;
}; bool cmp(const st &s1,const st &s2)
{
if(s1.val!=s2.val)
return s1.val>s2.val;
else
return s1.idx<s2.idx;
} int main()
{
int n,m;
bool pt=false;
int aa[11][81];
while(scanf("%d",&n)!=EOF && n>0)
{
scanf("%d",&m);
memset(aa,0,11*81*sizeof(int));
for(int i=1;i<=m;++i)
aa[1][i]=1;
int all=m;
for(int i=2;i<=n;++i)
{
for(int k=1;k<=m;++k)
{
for(int j=i-1;j<=(i-1)*m;++j)
aa[i][j+k]+=aa[i-1][j];
}
all*=m;
}
vector<st> vecin;
for(int i=n;i<=n*m;++i)
{
st ts;
ts.idx=i;
ts.val=aa[n][i];
vecin.push_back(ts);
}
int ep=pow(m*1.,n);
for(int i=0;i<vecin.size();++i)
{
vecin[i].vl=vecin[i].val*1./ep;
int tt=(vecin[i].vl+0.005)*100;
vecin[i].vl=tt*1./100;
vecin[i].val=tt%100;
}
sort(vecin.begin(),vecin.end(),cmp);
if(pt)printf("\n");
pt=true;
for(int i=0;i<3;++i)
{
printf("%d %.2f\n",vecin[i].idx,vecin[i].vl);
}
}
return 0;
}
/**************************************************************
Problem: 1360
User: huo_yao
Language: C++
Result: Accepted
Time:0 ms
Memory:1024 kb
****************************************************************/
题目链接:http://ac.jobdu.com/problem.php?pid=1360 九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299
【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ的更多相关文章
- 剑指Offer - 九度1360 - 乐透之猜数游戏
剑指Offer - 九度1360 - 乐透之猜数游戏2014-02-05 19:54 题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备 ...
- 【剑指Offer面试编程题】题目1509:树中两个结点的最低公共祖先--九度OJ
题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...
- 【剑指Offer面试编程题】题目1508:把字符串转换成整数--九度OJ
题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n&l ...
- 【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ
题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为两个整数m和n(1<=m,n<=10 ...
- 【剑指Offer面试编程题】题目1506:求1+2+3+...+n--九度OJ
题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 输入: 输入可能包含多个测试样例. 对于每个 ...
- 【剑指Offer面试编程题】题目1356:孩子们的游戏(圆圈中最后剩下的数)--九度OJ
题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...
- 【剑指Offer面试编程题】题目1355:扑克牌顺子--九度OJ
题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...
- 【剑指Offer面试编程题】题目1362:左旋转字符串--九度OJ
题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&qu ...
- 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ
题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,&quo ...
随机推荐
- zabbix-server报错:No route to host
前戏: 我在VM虚拟机中创建了2个liunx系统(rhel7和cent7),一个用作zabbix服务端,另一个用作zabbix客户端.但是用服务端监控客户端时图标是红色的监控不了,报错信息为:Get ...
- 转载:ADTS header
转自:http://blog.csdn.net/tx3344/article/details/7414543 1.ADTS是个啥 ADTS全称是(Audio Data Transport Stream ...
- MySQL中 IS NULL、IS NOT NULL、!= 能用上索引吗?
看面试题的时候,总能看到MySQL在什么情况下用不上索引,如下: MySQL的WHERE子句中包含 IS NULL.IS NOT NULL.!= 这些条件时便不能使用索引查询,只能使用全表扫描. 不耽 ...
- 使用dockerfile构建镜像并在容器中安装软件遇到的问题
今天想在容器中安装一个pigz插件,于是就在dockerfile中使用RUN命令RUN apt-get install -y pigz结果构建镜像的时候报错Unable to locate packa ...
- [PHP]新版的mongodb扩展安装和使用
旧版的mongo扩展已经不推荐使用了,在php7以上一般是安装和使用新版的mongodb扩展 ubuntu下 apt-get install php-mongodb 例如下面的代码进行了查询和插入集合 ...
- 李超线段树(segment[HEOI2013]-洛谷T4097)
(neng了好久好久才糊弄懂得知识点...) 一.李超线段树 在线动态维护一个二维平面直角坐标系, 支持插入一条线段, 询问与直线x = x0相交的所有线段中,交点y的最大/小值 (若有多条线段符合条 ...
- ping命令基于ICMP协议的返回信息分析
Ping是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中 Ping 是一个十分好用的 TCP/IP 工具.它主要的功能是用来检测网络的连通情况和分析网络速度.可以利用 PING 命令检查网络连通状 ...
- GCD: 求两数最大公因数算法【欧几里得法】原理的个人理解 (80%图片讲解!)
那么,求 a,b 的最大公因数就是求最大的,能均分a,b的块!
- Spring Security教程之session管理
1.1 检测session超时 1.2 concurrency-control 1.3 session 固定攻击保护 Spring Security通过http元素下的子元素s ...
- vue 事件总线(bus)
1.全局引入bus Vue.prototype.$bus = new.Vue() 2.组件间传值使用(在发送事件时接收组件会实时接收到, 可以用做兄弟组件间相互传值, 但页面跳转组件间有问题 通过$e ...