Java 代码分享(第11篇)编程解决数学问题:“计算3个10以内的数字,与合计值相除后,商的第3位小数大于4,共有多少个数的组合满足条件”类似问题
求与合计相除,小数位大于4的数字组合
1 + 3 + 4 + 9 = 17
1 / 17 ≈ 0.05882
3 / 17 ≈ 0.17647
4 / 17 ≈ 0.23529
9 / 17 ≈ 0.52941
可以发现,每一个商的第三位都是大于等于5的数,四舍五入后会进位。
下面的程序可以生成符合这样条件的数据。
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Random;
import java.util.stream.IntStream;public class Calculator {private enum COMPAREMOD {DAYU, DENGYU, XIAOYU}public Calculator() {// 第几位小数int bdNum1 = 3;// 大于等于小于 数字几int bdNum2 = 4;// 计算100次,任意三个100以内的数,共有多少个数满足条件,与合计值相除后,商的第3位小数大于4// doHalfAdjustRandom(100, bdNum1, bdNum2, COMPAREMOD.DAYU);// 计算3个10以内的数字,共有多少个数满足条件,与合计值相除后,商的第3位小数大于4。int max = 9;int count = 0;for (int i = 1; i <= max; i++) {for (int j = 1; j <= max; j++) {for (int k = 1; k <= max; k++) {if (doHalfAdjustRecycle2(bdNum1, bdNum2, COMPAREMOD.DAYU, i, j, k)) {count += 1;}}}}if (count != 0) {System.out.println("恭喜你,找到了" + count + "个这样的数!");} else {System.out.println("很遗憾,没找到!");}count = 0;// 计算4个10以内的数字,共有多少个数满足条件,与合计值相除后,商的第3位小数大于4。for (int i = 1; i <= 32767; i++) {if (doHalfAdjustRecycle2(bdNum1, bdNum2, COMPAREMOD.DAYU, i, i + 1, i + 2, i + 3)) {count += 1;}}if (count != 0) {System.out.println("恭喜你,找到了" + count + "个这样的数!");} else {System.out.println("很遗憾,没找到!");}}/*** 通过targetRecycle次运算,任意三个随机数,计算它们分别与合计的值进行除算,得到的商中满足条件的组合。* * @param targetRecycle 随机循环次数* @param compareNumIndex 第几位小数* @param comparedNum 和哪个数字进行比较* @param mode 比较是大于等于还是等于* @return*/private boolean doHalfAdjustRandom(int targetRecycle, int compareNumIndex, int comparedNum, COMPAREMOD mode) {return doHalfAdjustRecycleRandom(targetRecycle, 0, compareNumIndex, comparedNum, mode);}/*** @param targetRecycle 随机循环次数* @param currentRecycle 随机循环当前次数* @param compareNumIndex 第几位小数* @param comparedNum 和哪个数字进行比较* @param mode 比较是大于等于还是等于* @return*/private boolean doHalfAdjustRecycleRandom(int targetRecycle, int currentRecycle, int compareNumIndex,int comparedNum, COMPAREMOD mode) {BigDecimal zero = new BigDecimal(0);BigDecimal num1 = null;BigDecimal num2 = null;BigDecimal num3 = null;try {Random r = new Random();num1 = new BigDecimal(r.nextInt(100));num2 = new BigDecimal(r.nextInt(100));num3 = new BigDecimal(r.nextInt(100));} catch (Exception e) {e.printStackTrace();}if (num1 == zero || num2 == zero || num3 == zero) {return false;}BigDecimal sum = num1.add(num2).add(num3);BigDecimal result1 = num1.divide(sum, 5, RoundingMode.UP);BigDecimal result2 = num2.divide(sum, 5, RoundingMode.UP);BigDecimal result3 = num3.divide(sum, 5, RoundingMode.UP);int locThreshold1 = Integer.parseInt(result1.toString().substring(compareNumIndex + 1, compareNumIndex + 2));int locThreshold2 = Integer.parseInt(result2.toString().substring(compareNumIndex + 1, compareNumIndex + 2));int locThreshold3 = Integer.parseInt(result3.toString().substring(compareNumIndex + 1, compareNumIndex + 2));if (compare(comparedNum, mode, locThreshold1, locThreshold2, locThreshold3)) {System.out.println(num1 + "+" + num2 + "+" + num3 + "=" + sum);System.out.println(num1 + "/" + sum + "=" + result1.toString().substring(0, compareNumIndex + 2));System.out.println(num2 + "/" + sum + "=" + result2.toString().substring(0, compareNumIndex + 2));System.out.println(num3 + "/" + sum + "=" + result3.toString().substring(0, compareNumIndex + 2));System.out.println("****************\n");// return true;}if (targetRecycle == currentRecycle) {System.out.println("计算结束");return false;} else {return doHalfAdjustRecycleRandom(targetRecycle, currentRecycle + 1, compareNumIndex, comparedNum, mode);}}/*** 指定任意个数的数字,计算它们分别与合计的值进行除算,得到的商中满足条件的组合。* * @param targetRecycle 随机循环次数* @param currentRecycle 随机循环当前次数* @param compareNumIndex 第几位小数* @param comparedNum 和哪个数字进行比较* @param mode 比较是大于等于还是等于* @return*/private boolean doHalfAdjustRecycle2(int compareNumIndex, int comparedNum, COMPAREMOD mode, int... numParamArray) {// numParamArray的合计BigDecimal sum = new BigDecimal(IntStream.of(numParamArray).sum());// 商的集合BigDecimal[] thres = new BigDecimal[numParamArray.length];for (int i = 0; i < thres.length; i++) {// 求每一个数除以合计的商,第compareNumIndex+3位小数四舍五入。thres[i] = new BigDecimal(numParamArray[i]).divide(sum, compareNumIndex + 3, RoundingMode.FLOOR);// 求第compareNumIndex位小数int locThreshold = Integer.parseInt(thres[i].toString().substring(compareNumIndex + 1, compareNumIndex + 2));// 如果第compareNumIndex位的小数值不满足要求,则返回false,终止程序if (!compare(comparedNum, mode, locThreshold)) {return false;}}for (int i = 0; i < numParamArray.length; i++) {System.out.println(numParamArray[i] + "/" + sum + "≈" + thres[i].toString().substring(0, compareNumIndex + 2));}System.out.println("****************\n");return true;}/*** num与comparedNum做比较* * @param comparedNum 正整数* @param mode 比较模式:大于,等于,小于* @param num 正整数* @return*/private boolean compare(int comparedNum, COMPAREMOD mode, int... numParamArray) {for (int i = 0; i < numParamArray.length; i++) {int compareSrc = numParamArray[i];if (mode == COMPAREMOD.DAYU) {if (compareSrc <= comparedNum)return false;} else if (mode == COMPAREMOD.DENGYU) {if (compareSrc != comparedNum)return false;} else {if (compareSrc >= comparedNum)return false;}}return true;}public static void main(String[] args) {Calculator c = new Calculator();}}
计算结果
1/6≈0.166
1/6≈0.166
4/6≈0.666
1/6≈0.166
4/6≈0.666
1/6≈0.166
1/13≈0.076
4/13≈0.307
8/13≈0.615
1/15≈0.066
7/15≈0.466
7/15≈0.466
1/13≈0.076
8/13≈0.615
4/13≈0.307
2/7≈0.285
2/7≈0.285
3/7≈0.428
2/12≈0.166
2/12≈0.166
8/12≈0.666
2/7≈0.285
3/7≈0.428
2/7≈0.285
2/12≈0.166
5/12≈0.416
5/12≈0.416
2/16≈0.125
7/16≈0.437
7/16≈0.437
2/12≈0.166
8/12≈0.666
2/12≈0.166
3/7≈0.428
2/7≈0.285
2/7≈0.285
3/16≈0.187
6/16≈0.375
7/16≈0.437
3/16≈0.187
7/16≈0.437
6/16≈0.375
4/6≈0.666
1/6≈0.166
1/6≈0.166
4/13≈0.307
1/13≈0.076
8/13≈0.615
4/14≈0.285
4/14≈0.285
6/14≈0.428
4/15≈0.266
4/15≈0.266
7/15≈0.466
4/17≈0.235
4/17≈0.235
9/17≈0.529
4/14≈0.285
5/14≈0.357
5/14≈0.357
4/14≈0.285
6/14≈0.428
4/14≈0.285
4/15≈0.266
7/15≈0.466
4/15≈0.266
4/13≈0.307
8/13≈0.615
1/13≈0.076
4/17≈0.235
9/17≈0.529
4/17≈0.235
5/12≈0.416
2/12≈0.166
5/12≈0.416
5/14≈0.357
4/14≈0.285
5/14≈0.357
5/12≈0.416
5/12≈0.416
2/12≈0.166
5/14≈0.357
5/14≈0.357
4/14≈0.285
6/16≈0.375
3/16≈0.187
7/16≈0.437
6/14≈0.428
4/14≈0.285
4/14≈0.285
6/19≈0.315
6/19≈0.315
7/19≈0.368
6/21≈0.285
6/21≈0.285
9/21≈0.428
6/16≈0.375
7/16≈0.437
3/16≈0.187
6/19≈0.315
7/19≈0.368
6/19≈0.315
6/21≈0.285
9/21≈0.428
6/21≈0.285
7/15≈0.466
1/15≈0.066
7/15≈0.466
7/16≈0.437
2/16≈0.125
7/16≈0.437
7/16≈0.437
3/16≈0.187
6/16≈0.375
7/15≈0.466
4/15≈0.266
4/15≈0.266
7/16≈0.437
6/16≈0.375
3/16≈0.187
7/19≈0.368
6/19≈0.315
6/19≈0.315
7/15≈0.466
7/15≈0.466
1/15≈0.066
7/16≈0.437
7/16≈0.437
2/16≈0.125
8/13≈0.615
1/13≈0.076
4/13≈0.307
8/12≈0.666
2/12≈0.166
2/12≈0.166
8/13≈0.615
4/13≈0.307
1/13≈0.076
8/26≈0.307
9/26≈0.346
9/26≈0.346
9/17≈0.529
4/17≈0.235
4/17≈0.235
9/21≈0.428
6/21≈0.285
6/21≈0.285
9/26≈0.346
8/26≈0.307
9/26≈0.346
9/26≈0.346
9/26≈0.346
8/26≈0.307
恭喜你,找到了51个这样的数!
很遗憾,没找到!
连续数字的验证
使用下面的程序,可以使用更大的数据去验证,是否存在连续的数字符合这样的计算方式。**
执行结果是没有找到,大概率是不存在的。
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Random;
import java.util.stream.IntStream;public class Calculator2 {private enum COMPAREMOD {DAYU, DENGYU, XIAOYU}public Calculator2() {// 第几位小数int bdNum1 = 3;// 大于等于小于 数字几int bdNum2 = 4;boolean blrst = false;int count = 0;// 计算4个10以内的数字,共有多少个数满足条件,与合计值相除后,商的第3位小数大于4。for (BigDecimal i = new BigDecimal(1); i.compareTo(new BigDecimal("1000000000000")) != -1; i.add(new BigDecimal(1))) {BigDecimal n0 = i.add(new BigDecimal(0));BigDecimal n1 = i.add(new BigDecimal(1));BigDecimal n2 = i.add(new BigDecimal(2));BigDecimal n3 = i.add(new BigDecimal(3));BigDecimal n4 = i.add(new BigDecimal(4));BigDecimal n5 = i.add(new BigDecimal(5));BigDecimal n6 = i.add(new BigDecimal(6));BigDecimal n7 = i.add(new BigDecimal(7));BigDecimal n8 = i.add(new BigDecimal(8));BigDecimal n9 = i.add(new BigDecimal(9));if (doHalfAdjustRecycle2(bdNum1, bdNum2, COMPAREMOD.DAYU, n0, n1, n2, n3, n4, n5, n6, n7, n8, n9)) {count += 1;blrst = true;}}if (blrst) {System.out.println("恭喜你,找到了" + count + "个这样的数!");} else {System.out.println("计算结束,没找到!");}}/*** 指定任意个数的数字,计算它们分别与合计的值进行除算,得到的商中满足条件的组合。* * @param targetRecycle 随机循环次数* @param currentRecycle 随机循环当前次数* @param compareNumIndex 第几位小数* @param comparedNum 和哪个数字进行比较* @param mode 比较是大于等于还是等于* @return*/private boolean doHalfAdjustRecycle2(int compareNumIndex, int comparedNum, COMPAREMOD mode,BigDecimal... numParamArray) {// numParamArray的合计// BigDecimal sum = new BigDecimal(IntStream.of(numParamArray).sum());BigDecimal sum = new BigDecimal(0);for (int i = 0; i < numParamArray.length; i++) {sum = sum.add(numParamArray[i]);}// 商的集合BigDecimal[] thres = new BigDecimal[numParamArray.length];for (int i = 0; i < thres.length; i++) {// 求每一个数除以合计的商,第compareNumIndex+3位小数四舍五入。thres[i] = numParamArray[i].divide(sum, compareNumIndex + 3, RoundingMode.FLOOR);// 求第compareNumIndex位小数BigDecimal locThreshold = new BigDecimal(thres[i].toString().substring(compareNumIndex + 1, compareNumIndex + 2));// 如果第compareNumIndex位的小数值不满足要求,则返回false,终止程序if (!compare(new BigDecimal(comparedNum), mode, locThreshold)) {return false;}}for (int i = 0; i < numParamArray.length; i++) {System.out.println(numParamArray[i] + "/" + sum + "≈" + thres[i].toString().substring(0, compareNumIndex + 2));}System.out.println("****************\n");return true;}/*** num与comparedNum做比较* * @param comparedNum 正整数* @param mode 比较模式:大于,等于,小于* @param num 正整数* @return*/private boolean compare(BigDecimal comparedNum, COMPAREMOD mode, BigDecimal... numParamArray) {for (int i = 0; i < numParamArray.length; i++) {BigDecimal compareSrc = numParamArray[i];if (mode == COMPAREMOD.DAYU) {if (compareSrc.compareTo(comparedNum) != 1)return false;} else if (mode == COMPAREMOD.DENGYU) {if (compareSrc.compareTo(comparedNum) != 0)return false;} else {if (compareSrc.compareTo(comparedNum) != -1)return false;}}return true;}public static void main(String[] args) {Calculator2 c = new Calculator2();}}相关文章:
Java 代码分享(第11篇)编程解决数学问题:“计算3个10以内的数字,与合计值相除后,商的第3位小数大于4,共有多少个数的组合满足条件”类似问题
求与合计相除,小数位大于4的数字组合 1 3 4 9 17 1 / 17 ≈ 0.05882 3 / 17 ≈ 0.17647 4 / 17 ≈ 0.23529 9 / 17 ≈ 0.52941 可以发现,每一个商的第三位都是大于等于5的数,四舍五入后会进位。 下面的程序可以生成符合这样条件的数据。…...
面试题 17.05. 字母与数字
题目链接 面试题 17.05. 字母与数字 mid 题目描述 给定一个放有字母和数字的数组,找到最长的子数组,且包含的字母和数字的个数相同。 返回该子数组,若存在多个最长子数组,返回左端点下标值最小的子数组。若不存在这样的数组&…...
解决Win10图片/文件右键单击自动退出并刷新桌面问题
问题描述 这两天开始不知道怎么回事儿,右键选择图片时候,电脑黑屏且资源管理器自动重启。然后我就开始找很多方法去解决。 我试了很多种复杂的简单的方法,但是只有一种解决了我的问题。 解决方案【解决我的问题】 这个方法如下࿱…...
【代码随想录训练营】【Day39】第九章|动态规划|62.不同路径|63. 不同路径 II
不同路径 题目详细:LeetCode.62 有点简单呀,做类似这种题型时,最好就是先画图: 可以像题目一样,画一个二维表格,表格内的值代表到达这个格子的不同路径总数那么已知,如果图的大小为m 1 || n…...
【Linux】linux | 修改系统编码 | 增加字体处理 | 图片处理字体变成方块
一、说明1、CentOS7二、修改系统编码编辑文件vi /etc/locale.conf修改编码并保存LANGzh_CN.UTF-8配置生效source /etc/locale.conf1)修改系统编码,只是让系统支持中文编码2)不解决文字不显示的问题;往后看三、解决字体不显示问题非…...
R语言介绍及安装教程
R语言是一种免费的开源编程语言和环境,主要用于数据分析、统计建模和可视化。它可以运行在不同的操作系统上,如Windows、MacOS和Linux。R语言具有以下特点:丰富的数据处理和统计分析函数库;易于学习和使用;可以生成高质…...
Linux 练习九 (IPC 消息队列)
文章目录消息队列有亲缘关系的进程使用消息队列通信无亲缘关系的进程使用消息队列通信使用环境:Ubuntu18.04 使用工具:VMWare workstations ,xshell作者在学习Linux的过程中对常用的命令进行记录,通过思维导图的方式梳理知识点&am…...
在Win 11下使用Visual Studio 2019和cygwin编译JBR(Java SDK 17)源码
很多文章介绍了JDK 8和JDK11源码在Linux编译,很少有人介绍了JDK 17在windows的编译过程,所以写了这篇文章,为什么选用JBR 17版本,因为JBR17 版本集成了HotSwapAgent功能,具体HotSwapAgent有什么用,请看我前…...
java基础学习 day51 (匿名内部类)
1. 什么是匿名内部类? 隐藏了名字的内部类,实际名字为:外部类名$序号可以写在成员位置,为没有名字的成员内部类也可以写在局部位置,为没有名字的局部内部类 2. 匿名内部类的格式? new 类名/接口名() { 重…...
Spring MVC程序开发(三大功能)
文章目录一、什么是Spring MVC?1.MVC定义2.MVC与Spring MVC的关系3.创建方式二、Spring MVC的核心功能1.连接功能浏览器获取前端接口和后端程序连接功能实现get和post的区别Spring Boot热部署2.获取参数(1)传递单个参数(2)传递对…...
stack,queue
stack,queuestack的介绍和使用介绍使用模拟实现queue的介绍和使用介绍使用模拟实现priority_queue的介绍和使用介绍使用模拟实现容器适配器概念标准库中stack,queue的底层结构介绍deque原理缺陷deque作为stack,queue底层默认容器stack的介绍和使用 介绍 stack是适…...
shiro反序列化
shiro550反序列化 | 清风的博客这个看着更舒服点 环境搭建 JDK:1.7 Tomcat:8.5.83 shiro源码:下载地址:https://codeload.github.com/apache/shiro/zip/shiro-root-1.2.4 shiro war包:下载地址SHIRO-550/samples-…...
【GoF 23 概念理解】IoC/DI(控制反转/依赖注入)
搞清楚以下几个问题你就明白什么是 IoC/DI 了: 参与者都有谁?依赖:谁依赖于谁?为什么要依赖?注入:谁注入于谁?到底注入什么?控制反转:谁控制谁?控制什么&…...
stm32外设-GPIO
0. 写在最前 本栏目笔记都是基于stm32F10x 1. GPIO基本介绍 GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚, STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的…...
AfxMessageBox 自定义封装
一般情况下AfxMessageBox是系统提供的一个对话框,若要做这种效果的,必须重写。 实例1: void test_SgxMemDialog_AutoSize() { //使用给定大小的对话框 CSgxMemDialog dlg(180, 60); dlg.SetWindowTitle(_T(" SegeX - CT&qu…...
登入vCenter显示503,证书过期解决办法
登入vCenter显示503 原因:当安全令牌服务 (STS) 证书已过期时,会出现这些问题。这会导致内部服务和解决方案用户无法获取有效令牌,从而导致无法按预期运行(证书两年后就会过期)。 解决办法&…...
设计模式(十九)----行为型模式之命令模式
1、概述 日常生活中,我们出去吃饭都会遇到下面的场景。 定义: 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。命…...
【数据库】数据库基础架构
数据库架构 数据库对于后端程序员来说是每天都需要打交道的系统,因此了解并掌握MySQL底层原理是必须的。 基础架构图 MySQL内部分为两层,一个是Server层,另一个是存储引擎层,而我们常用的就是MyISAM、InnoDB,主要负…...
English Learning - L2 语音作业打卡 双元音 [ɔɪ] [ɪə] Day16 2023.3.8 周三
English Learning - L2 语音作业打卡 双元音 [ɔɪ] [ɪə] Day16 2023.3.8 周三💌发音小贴士:💌当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音 [ɔ…...
C++语法规则4(C++面向对象)
接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现。C 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明为纯虚…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
