zoukankan      html  css  js  c++  java
  • 【编程题目】n 个骰子的点数

    67.俩个闲玩娱乐(运算)。
    2.n 个骰子的点数。
    把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 S。输入 n,
    打印出 S 的所有可能的值出现的概率。

    思路:用递归把每个骰子的可能情况变量,记录各种和S出现的次数 比上 总情况数就是概率

    /*
    67.俩个闲玩娱乐(运算)。
    2.n 个骰子的点数。
    把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 S。输入 n,
    打印出 S 的所有可能的值出现的概率。
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include<math.h>
    
    
    void getallarr(int n, int * record) //递归得到每个可能出现的和出现的次数
    {
        static int sum = 0;
        static int num = n;
        if (0 == n)
        {
            record[sum - num]++;
            return;
        }
        for (int i = 1; i <= 6; i++)
        {
            sum += i;
            getallarr(n - 1, record);
            sum -= i;
        }
    }
    
    void printall(int n)
    {
        if (0 == n)
        {
            printf("input error");
        }
        int * record =(int *)malloc((5 * n + 1) * sizeof(int));
        memset(record, 0, (5 * n + 1) * sizeof(int));
        getallarr(n, record);
    
        for (int i = n; i <= 6*n; i++)
        {
            printf("%d:%d/%d
    ", i, record[i - n],int(pow(6.0,n)));
        }
       free(record); }
    int main() { printall(8); return 0; }

    看网上的答案,发现可以用动态规划。

    http://blog.csdn.net/whuqin/article/details/6639187

    1.现在变量有:骰子个数,点数和。当有k个骰子,点数和为n时,出现次数记为f(k,n)。那与k-1个骰子阶段之间的关系是怎样的?

    2.当我有k-1个骰子时,再增加一个骰子,这个骰子的点数只可能为1、2、3、4、5或6。那k个骰子得到点数和为n的情况有:

    (k-1,n-1):第k个骰子投了点数1

    (k-1,n-2):第k个骰子投了点数2

    (k-1,n-3):第k个骰子投了点数3

    ....

    (k-1,n-6):第k个骰子投了点数6

    在k-1个骰子的基础上,再增加一个骰子出现点数和为n的结果只有这6种情况!

    所以:f(k,n)=f(k-1,n-1)+f(k-1,n-2)+f(k-1,n-3)+f(k-1,n-4)+f(k-1,n-5)+f(k-1,n-6)

    3.有1个骰子,f(1,1)=f(1,2)=f(1,3)=f(1,4)=f(1,5)=f(1,6)=1。

  • 相关阅读:
    MariaDB的安装与启动
    Win10系统提示对于目标文件系统过大
    kvm中重命名虚拟机
    libvirt启动报错Failed to start Virtualization daemon
    常用的一些开源小工具 之 日期时间类
    常用的一些开源小工具 之 StringUtils
    zookeeper之 watch机制(三)
    shiro权限框架使用详解
    zookeeper节点之 java操作 和zookeeper-权限(ACL),设置超级用户(二)
    时间处理Date,最好改成 LocalDateTime ,时间计算,格式化时间,增加减少时间
  • 原文地址:https://www.cnblogs.com/dplearning/p/3917014.html
Copyright © 2011-2022 走看看