zoukankan      html  css  js  c++  java
  • 编程算法

    n个骰子的点数(递归) 代码(C)


    本文地址: http://blog.csdn.net/caroline_wendy


    题目: 把n个骰子仍在地上, 全部骰子朝上一面的点数之和为s. 输入n, 打印出s的全部可能的值出现的概率.


    採用递归的方法, 能够如果仅仅有一个骰子, 然后骰子数递增相加.


    代码:

    /*
     * main.cpp
     *
     *  Created on: 2014.7.12
     *      Author: spike
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    
    
    using namespace std;
    
    
    const int g_maxValue = 6;
    
    
    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 Probability (int number, int* pProbabilities) {
    	for	(int i=1; i<=g_maxValue; ++i)
    		Probability(number, number, i, pProbabilities);
    }
    
    
    void PrintProbability (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
    ", i, ratio);
    	}
    	delete[] pProbabilities;
    }
    
    
    int main(void)
    {
        PrintProbability(2);
        return 0;
    }
    
    
    
    

    输出:

    2: 2.777778e-002
    3: 5.555556e-002
    4: 8.333333e-002
    5: 1.111111e-001
    6: 1.388889e-001
    7: 1.666667e-001
    8: 1.388889e-001
    9: 1.111111e-001
    10: 8.333333e-002
    11: 5.555556e-002
    12: 2.777778e-002
    








  • 相关阅读:
    display:table-cell,inline-block 之间的缝隙
    ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study(树状数组)
    ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)
    1076 两条不相交的路径
    1107 斜率小于0的连线数量
    1112 KGold
    51nod 1110 距离之和最小V3
    1246 罐子和硬币
    1163 最高的奖励(贪心+优先队列)
    1028C:Rectangles
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7141136.html
Copyright © 2011-2022 走看看