九度OJ 1360:乐透之猜数游戏 (递归)
时间限制:2 秒
内存限制:32 兆
特殊判题:否
提交:955
解决:261
- 题目描述:
-
六一儿童节到了,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
思路:
意思是掷多次骰子得到的和为A,找出其分布中出现概率最高的三个数。
果断递归或者说动态规划来解决,第N+1次之后的结果从第N次的结果推出。
代码:
#include <stdio.h>
#include <stdlib.h> #define N 10
#define M 8 struct node {
int index;
double p;
} c[N*M+1]; int cmp(const void *a, const void *b)
{
struct node *c = (struct node *)a;
struct node *d = (struct node *)b;
if (c->p != d->p)
return (d->p > c->p) ? 1 : -1;
else
return c->index - d->index;
} int main(void)
{
int n, m, i, j, k;
double a[N*M+1];
double b[N*M+1];
int count; count = 0;
while (scanf("%d", &n) != EOF && n)
{
scanf("%d", &m);
b[0] = 1;
for(i=1; i<=n; i++)
{
for (j=i; j<=i*m; j++)
{
a[j] = 0;
for (k=j-1; k>=j-m; k--)
{
if (k>=i-1 && k<=(i-1)*m)
a[j] += b[k]/m;
}
//if (i == n)
// printf("%d: %.4lf\n", j, a[j]);
}
for (j=i; j<=i*m; j++)
b[j] = a[j];
}
for (i=n; i<=n*m; i++)
{
c[i-n].index = i;
double t0 = a[i]*100;
double t1 = (double)((int)t0);
double t2 = (double)((int)t0+1);
double t;
if (t0-t1 < t2-t0)
t = t1;
else
t = t2;
c[i-n].p = t/100;
}
qsort(c, (m-1)*n+1, sizeof(c[0]), cmp);
if (count > 0)
printf("\n");
for (i=0; i<3; i++)
printf("%d %.2lf\n", c[i].index, c[i].p);
count ++;
} return 0;
}
/**************************************************************
Problem: 1360
User: liangrx06
Language: C
Result: Accepted
Time:10 ms
Memory:916 kb
****************************************************************/
九度OJ 1360:乐透之猜数游戏 (递归)的更多相关文章
- 剑指Offer - 九度1360 - 乐透之猜数游戏
剑指Offer - 九度1360 - 乐透之猜数游戏2014-02-05 19:54 题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备 ...
- 【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ
题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备了一些不同类型的骰子,打算以掷骰子猜数字的方式发放奖品.例如,有的骰子有6个点数(点数 ...
- 九度OJ 1124:Digital Roots(数根) (递归)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2963 解决:1066 题目描述: The digital root of a positive integer is found by s ...
- 九度OJ 1095:2的幂次方 (递归)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:913 解决:626 题目描述: Every positive number can be presented by the exponent ...
- 九度oj 题目1074:对称平方数
题目1074:对称平方数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6422 解决:2912 题目描述: 打印所有不超过n(n<256)的,其平方具有对称性质的数. 如11*11 ...
- 九度OJ,题目1089:数字反转
题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ 1502 最大值最小化(JAVA)
题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
随机推荐
- iOS开发-关闭/收起键盘方法总结
前言:作为IOS开发人员,需要经常和表单打交道.因此我对收起键盘的方法作了下总结,IOS收起键盘有三种方法(如果有其它收起键盘的方法请在留言区指错). 收起键盘的方法: 1.点击Return按扭时收起 ...
- Navicat Premium常用快捷键
在使用操作数据库时,推荐navicat工具.记住一些常用快捷键,可大大提高工作效率,以下是简单总结的几个常用快捷键. 1.ctrl+r 运行当前查询窗口的所有sql语句 2.ctrl+shift+r ...
- java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
1.错误描写叙述 java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map at servic ...
- HDU 1009:FatMouse' Trade(简单贪心)
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 史上最简单的springcloud微服务入门实例,满足企业日常需求,开箱即用,工资翻倍不是梦
在传统的IT行业软件大多都是各种独立系统的堆砌,这些系统的问题总结来说就是扩展性差,可靠性不高,维护成本高.到后面引入了SOA服务化,但是,由于 SOA 早期均使用了总线模式,这种总线模式是与某种技术 ...
- C++语言基础(14)-typeid
typeid可用来判断类型是否相等: 例如有下面的定义: char *str; ; ; float f; 类型比较 结果 类型比较 结果 typeid(int) == typeid(int) true ...
- 680. Valid Palindrome II【easy】
680. Valid Palindrome II[easy] Given a non-empty string s, you may delete at most one character. Jud ...
- linux c++自己使用pthread封装的线程类
#include<iostream> #include<pthread.h> #include<unistd.h> using namespace std; //t ...
- Unity3D - LINEAR INTERPOLATION
原文地址:http://unity3d.com/learn/tutorials/modules/beginner/scripting/linear-interpolation 水平有限,翻译粗略,欢迎 ...
- wp8 各种启动器
PhoneCallTask 打电话 需要 ID_CAP_PHONEDIALER Windows Phone 8, Windows Phone OS 7.1