首页 > 试题广场 >

骰子游戏

[编程题]骰子游戏
  • 热度指数:190 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
小易参加了一个骰子游戏,这个游戏需要同时投掷n个骰子,每个骰子都是一个印有数字1~6的均匀正方体。
小易同时投掷出这n个骰子,如果这n个骰子向上面的数字之和大于等于x,小易就会获得游戏奖励。
小易想让你帮他算算他获得奖励的概率有多大。

输入描述:
输入包括两个正整数n和x(1 ≤ n < 25, 1 ≤ x < 150),分别表示骰子的个数和可以获得奖励的最小数字和。


输出描述:
输出小易可以获得奖励的概率。
如果概率为1,输出1,如果概率为0,输出0,其他以最简分数(x/y)的形式输出。
示例1

输入

3 9

输出

20/27
#include<iostream>  
#include <cmath>  
#include <iomanip> 
#include <vector> 
#include <string.h>
using namespace std;  

int main()
{
    int n;
    int m;
    while(cin>>n>>m)
    {
        unsigned long long count = 1;
        int i=0;
        for(i=0;i<n;i++)
        {
            count = count*6;
        }
        
        int length = 6 * n + 1;
        vector<unsigned long long> arr;
        arr.clear();
        arr.resize(length);
        for (int i = 1; i <= 6; ++i)  //骰子个数为1的情况;
        {
            arr[i] = 1;
        }

        int j, k;
        for (j = 2; j <= n; ++j)//骰子个数;
        {
            for (k = 6 * j; k >= j; --k) //骰子上面个数和;
            {
                arr[k] = 0;
                for (int m = 1; m <= 6 && k > m; ++m)
                 {
                    arr[k] += arr[k - m];
                }
                }
            arr[j - 1] = 0;
        }
        
        unsigned long long num=0;
        for (int j = n; j <6*n+1 ; ++j)
        {
            if(j>=m)
            {
                num = num+ arr[j];
            }
        }
        if(num==0)
        {
            cout<<0<<endl;
            continue;
        }
        
        if(num==count)
        {
            cout<<1<<endl;
            continue;
        }
        
        while(1)
        {
            bool tag=false;
            for(i=2;i<=8;i++)
            {
               if((num%i==0)&&(count%i==0))
               {
                   num/=i;
                   count/=i;
                   tag=true;
               }
            }
            if(tag==false)
            {
                break;
            }
        }
        cout<<num<<"/"<<count<<endl;
    }
    return 0;
}

发表于 2018-06-05 15:53:45 回复(0)