n个骰子的点数 java_n个骰子的点数和为s的概率集合输出(Java)

问题描述:

把n个骰子仍在地上,所有骰子朝上一面的点数之和为s,输入n,打印出s的所有可能出现的概率

问题分析:

这是一道应用动态规划思想的题目,而动态规划最难的就是要找最优子结构。并采取一种称为备忘录的方法避免重复计算。因为备忘录方法为每个解过的子问题建立了备忘录,以备需要时参看,避免了相同子问题的重复求解。

最优子结构:

F(n, s) 表示n个骰子点数和为s的种数,n表示骰子个数,s表示n个骰子的点数和

F(n, s) = F(n-1, s-1) + F(n-1, s-2) + F(n-1, s-3) + F(n-1, s-4) + F(n-1, s-5) + F(n-1, s-6)

public class Probability {

public void printProbability(int number) { //number为骰子的个数

if (number < 1) return;

int g_maxValue = 6; //骰子的最大点数为6

int[][] probabilities = new int[2][]; //定义两个数组用于保存前一循环的数据供下一阶段使用

probabilities[0] = new int[g_maxValue * number + 1];

probabilities[1] = new int[g_maxValue * number + 1];

int flag = 0; //用于表示轮数交换的表示,当前阶段的信息做下一阶段的输入,上一阶段的信息清空,表示下阶段的输出

//初始化骰子为1时,F(1,s) 的频数

for (int i = 1; i <= g_maxValue; i++)

probabilities[0][i] = 1;

// n表示s要加上第n个骰子朝上的数,也表示n轮大循环

for (int n = 2; n <= number; ++n) {

// 归零操作,因为随着s的变大,F(1,0), F(2,1), F(3,2),...,F(6,5)都不会出现,但是前面计算出现过F(1,1), F(2,2), F(3,3),...,F(5,5),

//因为我们是交替使用前一个数组,所以必须作归零处理

for (int i = 0; i < n; ++i)

probabilities[1 - flag][i] = 0;

//第n轮数据之和为s∈[n, g_maxValue*n],然后计算每一个s的频数

for (int s = n; s <= g_maxValue * n; ++s) {

probabilities[1 - flag][s] = 0; // 第n轮第n个数据初始化为0

//计算F(n, s) = F(n-1, s-1) + F(n-1, s-2) + F(n-1, s-3) + F(n-1, s-4) + F(n-1, s-5) + F(n-1, s-6)

for (int j = 1; j <= s && j <= g_maxValue; ++j)

probabilities[1 - flag][s] += probabilities[flag][s - j];

}

flag = 1 - flag;

}

double total = Math.pow(g_maxValue, number);

for (int i = number; i <= g_maxValue * number; i++) {

double ratio = (double) probabilities[flag][i] / total;

System.out.println(i);

System.out.println(ratio);

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2015的最后一天

今天是2015年的以后一天&#xff0c;3点半就要下班了。 也是我毕业&#xff0c;来到这家公司第5个月。 毕业后&#xff0c;去学习php&#xff0c;我喜欢这个&#xff0c;希望通过自己的努力给自己一个未来。 没什么可说的&#xff0c;加油吧&#xff0c;2016&#xff01;&#…

java se是不是java_Java SE和java EE究竟有什么实质上的区别

1、Java SE:Java SE 是Java平台标准版的简称(Java Platform, Standard Edition) (also known as Java 2 Platform) &#xff0c;用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。Java SE包括用于开发Java Web服务的类库&#xff0c;同时&#xff0c;Java S…

使用IntelliJ IDEA 14和Maven创建java web项目

安装Maven 下载安装 去maven官网下载最新版。 解压到安装目录。 配置 右键桌面的计算机图标&#xff0c;属性–>高级系统设置–>环境变量&#xff0c;添加M2_HOME的环境变量&#xff0c;然后将该变量加入的PATH中。 注意 必须要有JAVA_HOME和个环境变量&#xff0c;不然m…

工作那点小事

目录 工作那点小事总结回到顶部工作那点小事 离开了“火龙果”&#xff0c;领导&#xff0c;领导的领导&#xff0c;领导的领导的领导&#xff0c;同事&#xff0c;同事等等&#xff0c;给你上了一堂课。 面试时&#xff0c;问&#xff1a;为什么离开上一家公司&#xff1f;答&…

java textfield赋值_Java中怎么把运行结果显示到textfield中

两种办法:1) 在原有方法里加设置到textfield的命令public static void ipaddress(){try{InetAddress inet InetAddress.getLocalHost();System.out.println(inet.getHostAddress());text1.setText(inet.getHostAddress());//new added}catch(UnknownHostException e){System.e…

01算法 java_蓝桥杯:基础练习 01字串【JAVA算法实现】

题目描述对于长度为5位的一个01串&#xff0c;每一位都可能是0或1&#xff0c;一共有32种可能。它们的前几个是&#xff1a;0000000001000100001100100请按从小到大的顺序输出这32种01串。输入格式本试题没有输入。输出格式输出32行&#xff0c;按从小到大的顺序每行一个长度为…

Testlink1.9.5的安装配置

前两天搭建了Testlink环境&#xff0c;在这里整理记录下过程中遇到的问题以及搭建流程。Testlink版本&#xff1a;1.9.5操作系统&#xff1a;Windows7 32bit 步骤一&#xff1a;安装XAMPP 下载解压xampp压缩包&#xff0c;点击安装包xampp-win32-1.8.0-VC9-installerservice se…

Git的基础

http://backlogtool.com/git-guide/cn/intro/intro2_3.html转载于:https://www.cnblogs.com/liucyi/p/5107806.html

UIAutomator输入中文

之前一直是英文的测试环境&#xff0c;包括手机也是英文的&#xff0c;app也是英文的&#xff0c;涉及不到中文输入法的东西。但现在在写中文的app&#xff0c;所以需要输入中文。看到网上的解决办法如下: 下载https://github.com/sumio/uiautomator-unicode-input-helper源码 …

java 自定义解码_[求助],java如何使用自定义注解对入参进行解密?

正好之前做过自定义ArgumentResolver相关的开发。先指出你的一个问题&#xff0c;ArgumentResolver是对你Controller方法上的单个参数进行解析&#xff0c;也就是说&#xff0c;你的参数是什么类型&#xff0c;就要return什么类型&#xff0c;直接返回一个String除非你的参数就…

java 视频 缩略图_如何使用java提取视频缩略图或某一帧的图片

[Java] 纯文本查看 复制代码public class CreateImage {/*** 获取指定视频的帧并保存为图片至指定目录* [urlhome.php?modspace&uid952169]Param[/url] videofile 源视频文件路径* param framefile 截取帧的图片存放路径* throws Exception*/public static void fetchFram…

jni java返回数组_Android开发实践:Java层与Jni层的数组传递

Android开发中&#xff0c;经常会在Java代码与Jni层之间传递数组(byte[])&#xff0c;一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层&#xff0c;由Jni层的Socket代码发送出去&#xff0c;当然&#xff0c;Jni层也需要把从Socket接收到的数据流返回给Java层。我…

查出数字字符字段中非数字字符的记录

最近&#xff0c;将原来的数字符字段转换为数字时&#xff0c;总报错误&#xff1a;无效数字。 如何找出其中哪些是非数字字符的记录&#xff1f;比较麻烦的事。下面是用Oracle DB自带的函数translate可以找出来的 1.创建测试表 Create Table TestChar( ITEM_NUMBER VARCHAR…

jsp mysql 注入_由Jsp+Mysql注入到root权限的全程展 【好久没有安全类文章了,转一篇看看】...

由JspMysql注入到root权限的全程展最近有点空闲,所以写点垃圾文章来消磨一下时间.文中没有什么技术含量,如果要转载,请注明作者并保持文章的完整.很多人可能都知道asp,php的编程要防止sql注入漏洞,而并不知道jsp编程同样也需要防备sql注入漏洞.其实,一旦jsp代码有注入漏洞,将直…

MySQL Replication Error 处理一例

故障现象 MySQL slave status详情 mysql> show slave status\G *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.10.10.101Master_User: rootMaster_Port: 3306Connect_Retry: 60Master_L…

java中的time_java中的Time处理

得到当前时间1. Calendar.getInstance().getTime();2. new Timestamp(System.currentTimeMillis());3. new Timestamp((Calendar.getInstance().getTime()).getTime());--------------------------------|date------------------------------------------------------Simple…

ubuntu14.04LTS openssh-server 手动安装配置步骤

先用能上网的机器下载&#xff1a;zlib-1.2.5.tar.bz2、openssh-5.6p1.tar.gz、openssl-0.9.8o.tar.tar&#xff0c;接下来&#xff0c;准备安装。 步骤如下&#xff1a; 1、首先解压安装zlib&#xff1a;tar -xf zlib-1.2.5.tar.bz2&#xff0c;会在当前目录下生成zlib目录。进…

java tls 证书_在使用Java 8重新协商TLS_1.2期间,服务器证书更改受到限制

我对SSL很陌生,并且被看似已知的问题所困扰.我的应用程序是SSL客户端,并调用另一个为双向SSL启用的组件.两个组件中的证书都是正确的,有时连接工作正常.每个服务器都有自己的服务器证书和私钥,但具有相同的根证书和中间证书.服务器中的SSL检查在Apache SW LB中完成.|----------…

将前台json对象传入java后台

前台json格式的数据如何传入后台 1. 将要传入后台的数据组装成JSON格式的字符串: var jsonStr [{name:jim , age:20} , {name:king , age:26},{name:jge , age:30}] 2. 使用JQuery的ajax请求后台 jQuery.ajax({ type: "post", url: url, dataType : json, data : {m…

java windows wrapper_Java Service Wrapper 发布windows后台程序的方法

Java ServiceWrapper发布可执行jar文件的方法通过摸索&#xff0c;终于将我的程序转换成windows后台服务程序了&#xff0c;实现股票成交明细数据自动定时下载&#xff0c;很爽&#xff01;现将心得要点记录如下&#xff1a;2.建立项目文件夹。例如 d:/myApp3.在该文件夹下建立…