数学概率题

Description

You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell of the cave can contain any amount of gold.

Initially you are in position 1. Now each turn you throw a perfect 6 sided dice. If you get X in the dice after throwing, you add X to your position and collect all the gold from the new position. If your new position is outside the cave, then you keep throwing again until you get a suitable result. When you reach the Nth position you stop your journey. Now you are given the information about the cave, you have to find out the expectednumber of gold you can collect using the given procedure.

Input

Input starts with an integer T (≤ 100), denoting the number of test cases.

Each case contains a blank line and an integer N (1 ≤ N ≤ 100) denoting the dimension of the cave. The next line contains N space separated integers. The ith integer of this line denotes the amount of gold you will get if you come to the ith cell. You may safely assume that all the given integers will be non-negative and no integer will be greater than 1000.

Output

For each case, print the case number and the expected number of gold you will collect. Errors less than 10-6 will be ignored.

Sample Input

3

1

101

2

10 3

3

3 6 9

Sample Output

Case 1: 101.0000000000

Case 2: 13.000

Case 3: 15

题意:给你n个数,

在每一个数你都可以仍骰子,决定下一步走到哪儿,但是你要是扔的数超了这个数组就重新仍,直到到n为止。

用d数组推每一点的概率。

数学期望 = 每一点的概率 * 到该点的值。

#include<iostream>
#include<stack>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#define N 1000
using namespace std;
#define oo 0x3f3f3f
double d[N];
int a[N];
char str[N];
char s[N];
int main()
{
    int t,n;
    int k = 1;
    scanf("%d",&t);
    while(t--)
    {
        double ans = 0;

        memset(d,0,sizeof(d));
        memset(a,0,sizeof(a));
        d[1] = 1;
        scanf("%d",&n);

        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
            int i,j;

        for(i = 1;i<=n;i++)
        {
            double h;
            if(n - i < 6)
                h = n - i;
            else
                h = 6;
            for(j=1;j<=h;j++)
                d[i+j] += d[i] * (double)(1.0/h);

            ans += (double)a[i] * d[i];
        }
        printf("Case %d: %lf\n",k++,ans);
    }
    return 0;
}
时间: 2024-10-09 05:08:31

数学概率题的相关文章

2018高考数学真题权威专家评析+2019备考方向解读

2018高考数学真题汇总!权威专家评析+2019备考方向解读 "试卷稳中求新,在保持结构总体稳定基础上,科学灵活地确定试题内容,强调数学应用,突出关键能力."教育部考试中心命题专家认为,2018年高考数学卷一个突出的特点是,根据文理科考生数学素养综合要求,调整文理科同题比例,为新一轮高考数学不分文理科的改革进行了积极探索. 探索内容改革,助推素质教育 教育部考试中心命题专家介绍,根据文理科考生数学素养的综合要求,调整全国Ⅱ卷.全国Ⅲ卷文理科同题比例,为新一轮高考数学不分文理科改革进行了

数学趣味题(相邻同加同减问题)

想要弥补数学方面的知识于是我看了刘汝佳老师的算法艺术. 从简单开始在这里记录一下. 题目的描述 很容易理解但是让我想的话,我会感觉很困难. 似乎见到多了,对这种问题有一种天生的恐惧. 但是学习嘛,一点一点积累. 刘汝佳老师这样讲到. 先把8个点归为红色和蓝色两类. 相邻的点不在同一类中. 假设我们先看一下最下面的ABCD四个点,假设A点有a个麻烦子,B点有b个麻烦子,C点有c个,D点有d个. 我们先让A,B同时增加c个,然后让B,C同时减少c个,这样就C就没有了,而A中多了c个.这样我们就能把同

hdu 3641 数论 二分求符合条件的最小值数学杂题

http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*==================================================== 二分查找符合条件的最小值 ======================================================*/ ll solve() { __int64 low = 0, high = INF, mid ; while(low <=

HDU 4839 The Game of Coins 概率题。(母函数

The Game of Coins mark: #include"cstdio" #include"iostream" #include"queue" #include"algorithm" #include"set" #include"queue" #include"cmath" #include"string.h" #include"

Acdreamoj1115(数学思维题)

题意:1,3是完美数,如果a,b是完美数,则2+a*b+2*a+2*b,判断给出的n是否是完美数. 解法:开始只看出来2+a*b+2*a+2*b=(a+2)*(b+2)-2,没推出更多结论,囧.没办法,只能暴力将所有的完美数求出来然后查表.正解是c+2=(a+2)*(b+2);完美数都是有质因子3或5组成的(5本身除外): 自己暴力代码: /****************************************************** * author:xiefubao *****

hdu 4961 数学杂题

http://acm.hdu.edu.cn/showproblem.php?pid=4961 先贴个O(nsqrtn)求1-n所有数的所有约数的代码: vector<int>divs[MAXN]; void caldivs() { for(int i=1;i<MAXN;i++) for(int j=i;j<MAXN;j+=i) divs[j].push_back(i); } 有了这个当时理下思路就可写了,但是重复数处理注意: 1.用一个数组vis[]  vis[i]=1表示i存在

Codeforces 453A Little Pony and Expected Maximum 概率题Orz

题目链接:点击打开链接 #include <stdio.h> #include <iostream> #include <algorithm> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-8 #define pi acos(-1.0) typedef long long ll; int main() { int i, j; double m,n; while(cin>>m>>

概率题

题目1 (2014腾讯笔试题) 36辆车,6个跑道,最少轮数决出前3名. 分析 分6组,每组跑一次,进行排序. 然后每组第一快的人再跑一遍,确定最快的3组. 最后最快的第一组取3个人,第二快的人取2个人(因为最快的人一定在最快的第一组),第三快的人取1个人.共6个人.再跑一遍. 所以总共是6+1+1=8轮. 以下转自:http://www.acmerblog.com/interviews-about-probability-5359.html 题目2 假设你参加了一个游戏节目,现在要从三个密封的

HDU 4576 Robot(概率题)

Robot Problem Description Michael has a telecontrol robot. One day he put the robot on a loop with n cells. The cells are numbered from 1 to n clockwise. At first the robot is in cell 1. Then Michael uses a remote control to send m commands to the ro