边看边写(n个骰子的点数)

本文介绍了一种计算n个骰子投掷后所有可能点数之和的概率的方法。通过两种不同的算法实现:递归方法和循环方法。递归方法虽然简洁但效率较低;循环方法利用动态规划思想,效率更高。
#region n个骰子的点数
    /// <summary>
    /// 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出所有可能的值出现的概率。
    /// </summary>
    class Dice
    {
        private int g_maxValue=6;
        private int _number;
        public int number 
        {
            get { return _number; }
            set { _number = value; }
        }
        public Dice(int n)
        {
            number = n;
        }
       /// <summary>
       ///Solution1 使用递归的方式,但是时间效率不高
        /// </summary>
        public void PrintProbability()
        {
            if (number < 1)
                return;
            int maxSum = number * g_maxValue;
            List<int> pProbility = new List<int>();
            for (int i = 0; i < maxSum - number+1; i++)
                pProbility.Add(0);
            Probility(number, pProbility);
            double total = Math.Pow(g_maxValue,number);
            for (int i = 0; i < maxSum - number+1; i++)
            {
                double ratio = (double)pProbility[i] / total;
                Console.WriteLine("{0}:{1}",i+number,ratio);
            }

        }
        public void Probility(int num,List<int> pProbility)
        {
            for (int i = 1; i <= g_maxValue; i++)
            {
                Probility(num, num, i, pProbility);
            }
        }
        public void Probility(int original,int current, int sum, List<int> pProbility)
        {
            if (current == 1)
                pProbility[sum - original]++;
            else
            {
                for(int i=1;i<=g_maxValue;i++)
                    Probility(original, current - 1, i + sum, pProbility);
            }
        }
        /// <summary>
        ///Solution1 使用循环的方式,但是时间效率较高
        /// </summary>
        public void PrintProbabilitySolution2()
        {
            if (number < 1)
                return;
            List<List<int>> pProbilities = new List<List<int>>(){new List<int>(),new List<int>()};
            for (int i = 0; i < g_maxValue * number + 1; ++i)
            {
                pProbilities[0].Add(0);
                pProbilities[1].Add(0);
            }

            int flag = 0;
            for (int i = 1; i <= g_maxValue; ++i)//记录的是第一个骰子每个总数出现的次数,从1到6个点数,各出现一次。
                pProbilities[flag][i] = 1;
            for (int k = 2; k <= number; ++k)//控制k的开始,k从2开始,也就是说骰子数大于2,否则,不用计算
            {
                for (int i = 0; i < k; ++i)
                    pProbilities[1 - flag][i] = 0;
                for (int i = k; i <= g_maxValue * k; ++i)
                {
                    pProbilities[1 - flag][i] = 0;
                  //f(n)=f(n-1)+f(n-2)+f(n-3)+f(n-4)+f(n-5)+f(n-6),均是上次循环的相差1,2,3,4,5,6的次数
                   for (int j = 1; j <= i && j <= g_maxValue; ++j)
                        pProbilities[1 - flag][i] += pProbilities[flag][i - j];
                }
                flag = 1 - flag;//flag用于切换数组
            }
            double total = Math.Pow(g_maxValue, number);
            for (int i = 0; i < g_maxValue * number+1; i++)
            {
                double ratio = (double)pProbilities[flag][i] / total;
                Console.WriteLine("{0}:{1}", i, ratio);
            }
        }
    }
    #endregion


源码直接下载地址: https://pan.quark.cn/s/95437fdf229e Intel I-219V网卡驱动是一款专门为Intel的I-219V千兆以太网控制器而研发的驱动程序,其主要作用在于保障在Ubuntu 16.04操作系统环境下的正常运作以及优化系统性能。Intel I-219V作为一款广泛应用的内置网络接口控制器(NIC),常被集成在台式机及笔记本电脑的主板上,负责提供高速的网络连接服务。Intel公司所提供的e1000e驱动是与此硬件相配套的开源驱动解决方案,其中版本3.3.5.3是专门针对该硬件设备的定制版本。此驱动包含了不可或缺的源代码部分,赋予开发者和系统管理者按照特定需求进行编译和定制的权限,从而能够适应多样化的系统配置或针对特定情形进行问题解决。源代码的可用性同样表明用户有能力依据Linux内核的更新情况来升级驱动,确保与最新技术标准的兼容性。在Ubuntu 16.04系统中成功编译的驱动意味着它已经通过了严苛的测试流程,并能够与该版本的Linux内核实现良好兼容。Ubuntu 16.04,其代号为Xenial Xerus,是一个长期支持(LTS)的版本,因此对于那些追求系统稳定性和安全保障的用户群体而言具有特殊的意义。驱动程序的兼容性保障了I-219V网卡能够在该系统平台上实现无缝运行,提供稳定可靠的网络连接,这既包括局域网(LAN)的连接,也可能涵盖通过Wi-Fi桥接实现的无线网络连接。驱动程序的核心职责涵盖了网络接口的初始化与管理、数据包的接收与发送处理,以及错误检测与纠正功能的执行。在Linux操作系统架构中,驱动通常以模块的形式加载至内核之中,这种设计允许在非必要时期进行卸载操作,以此来有效节省系统资源。e1000e驱...
内容概要:本文围绕基于共识的捆绑算法(CBBA)在多智能体系统中的多任务分配问题展开研究,重点应用于远程太空船交会与维修的相对轨道操作(RPO)规划。通过Matlab代码实现了CBBA算法,系统地解决了多个航天器在复杂空间环境下协同执行多目标任务时的任务分配、路径规划与动态协商问题。研究详细展示了算法在任务分解、竞标机制、共识达成及冲突消解等方面的核心逻辑,验证了其在分布式决策、通信受限条件下的高效性与鲁棒性,并结合航天工程实际背景突出了算法的应用价值。该资源不仅提供完整的仿真代码,还包含详细的流程解析,有助于深入理解多智能体协同机制的设计原理。; 适合人群:具备控制理论、航天器动力学、多智能体系统或分布式优化背景的研究生、科研人员及航空航天领域工程技术人员,熟练掌握Matlab编程者尤佳。; 使用场景及目标:①应用于在轨服务、空间碎片清除、多航天器编队飞行、星座维护等多智能体协同任务的任务分配与规划;②为研究人员提供CBBA算法的实现范例,支撑其开展分布式任务规划算法的改进与扩展研究;③作为教学案例用于高级课程中讲解多智能体协同决策机制。; 阅读建议:建议结合Matlab代码逐模块分析算法实现过程,重点关注任务打包、竞标更新、共识收敛等关键环节,可尝试引入通信延迟、故障容错或障碍规避机制以进一步提升算法实用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值