博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer——面试题43:n个骰子的点数
阅读量:4087 次
发布时间:2019-05-25

本文共 2112 字,大约阅读时间需要 7 分钟。

void PrintProbability_Solution1(int number){    if(number < 1)        return;     int maxSum = number * g_maxValue;    int* pProbabilities = new int[maxSum - number + 1];    for(int i = number; i <= maxSum; ++i)        pProbabilities[i - number] = 0;     Probability(number, pProbabilities);     int total = pow((double)g_maxValue, number);    for(int i = number; i <= maxSum; ++i)    {        double ratio = (double)pProbabilities[i - number] / total;        printf("%d: %e\n", i, ratio);    }     delete[] pProbabilities;} void Probability(int number, int* pProbabilities){    for(int i = 1; i <= g_maxValue; ++i)        Probability(number, number, i, pProbabilities);} void Probability(int original, int current, int sum,                  int* pProbabilities){    if(current == 1)    {        pProbabilities[sum - original]++;    }    else    {        for(int i = 1; i <= g_maxValue; ++i)        {            Probability(original, current - 1, i + sum, pProbabilities);        }    }}

void PrintProbability_Solution2(int number){    if(number < 1)        return;    int* pProbabilities[2];    pProbabilities[0] = new int[g_maxValue * number + 1];    pProbabilities[1] = new int[g_maxValue * number + 1];    for(int i = 0; i < g_maxValue * number + 1; ++i)    {        pProbabilities[0][i] = 0;        pProbabilities[1][i] = 0;    }     int flag = 0;    for (int i = 1; i <= g_maxValue; ++i)         pProbabilities[flag][i] = 1;         for (int k = 2; k <= number; ++k)     {        for(int i = 0; i < k; ++i)            pProbabilities[1 - flag][i] = 0;        for (int i = k; i <= g_maxValue * k; ++i)         {            pProbabilities[1 - flag][i] = 0;            for(int j = 1; j <= i && j <= g_maxValue; ++j)                 pProbabilities[1 - flag][i] += pProbabilities[flag][i - j];        }         flag = 1 - flag;    }     double total = pow((double)g_maxValue, number);    for(int i = number; i <= g_maxValue * number; ++i)    {        double ratio = (double)pProbabilities[flag][i] / total;        printf("%d: %e\n", i, ratio);    }     delete[] pProbabilities[0];    delete[] pProbabilities[1];}

你可能感兴趣的文章
mySQL--深入理解事务隔离级别
查看>>
分布式之redis复习精讲
查看>>
数据结构与算法7-栈
查看>>
线性数据结构学习笔记
查看>>
数据结构与算法9-递归
查看>>
数据结构与算法10-冒泡排序、插入排序、选择排序
查看>>
数据结构与算法14-跳表
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
计算机组成原理 | 冯·诺依曼体系结构:计算机组成的金字塔 | 极客时间
查看>>
JAVA语言核心精讲1-Java语言特性
查看>>
JAVA语言核心精讲2-异常相关
查看>>
JAVA语言核心精讲5-反射机制与动态代理原理
查看>>
JAVA语言核心精讲7--ArrayList/Vector/LinkedList对比
查看>>
Lombok老母猪
查看>>
Mybatis中javaType和jdbcType对应关系
查看>>
lombok的@EqualsAndHashCode注解
查看>>
spring cloud zuul上传文件乱码
查看>>
Spring NoSuchBeanDefinitionException原因分析
查看>>
常见链表相关算法-java语言实现
查看>>
链表算法--检测环
查看>>