N个筛子,掷出M值的可能性

来源:互联网 发布:小型图书馆源码 编辑:程序博客网 时间:2024/04/20 21:18

思路是用递归把所有可能性都计算出来,放在一个Dictionary里面。

using System.Collections.Generic;using System.Linq;using NUnit.Framework;namespace ClassLibrary{    [TestFixture]    public class GambleTest    {        [Test]        public void GambleTestEntrance()        {            var instance = new Gamble();            int n = 3;            instance.CaculatePossibility(0, n);            Dictionary<int, int> result = instance.possibleDict;        }        public class Gamble        {            private int maxSides = 6;            public Dictionary<int, int> possibleDict = new Dictionary<int, int>();            public void CaculatePossibility(int currentSum, int n)            {                for (int i = 1; i <= maxSides; i++)                {                    if (n == 1)                    {                        putIntoDict(currentSum + i);                    }                    else                    {                        CaculatePossibility(currentSum + i, n - 1);                    }                }            }            private void putIntoDict(int currentSum)            {                if (possibleDict.Keys.Contains(currentSum))                {                    possibleDict[currentSum]++;                }                else                {                    possibleDict[currentSum] = 1;                }            }        }    }}