三分法解决假币问题(JAVA)
一,问题描述
有n个硬币,其中有一枚是假币,假币比真币要轻,现有一天平,通过比较找出假币。
二,三分法思路
1.将硬币分为三堆,每堆按照n/3向上取整个硬币来分配(主要分配前两堆,第三堆就是剩下的)
2.比较第一堆和第二堆硬币重量
若重量相等,则在第三堆中找假币,重复第一步
若第一堆比第二堆重,则在假币在第二堆中,去第二堆中找假币,重复第一步
若第二堆比第一堆重,则在假币在第一堆中,去第一堆中找假币,重复第一步
package algorithm;import sun.applet.Main;public class Test {//三分法找假币/*** left表示所要查找的数组中第一个元素在n个硬币中的数组下标* right表示所要查找的数组中最后一个元素在n个硬币中的数组下标* 输入:硬币数组a[]* 输出:假币在数组中对应的下标**/int find3(float a[],int left,int right){int n=right-left+1;//硬币个数int m1=left+upint(n)-1;//第一堆硬币的最后一个硬币在n个硬币中对应的下标int m2=left+2*upint(n)-1;//第二堆硬币的最后一个硬币在n个硬币中对应的下标//前两堆硬币等重,则在第三堆中找假币if (weight(a,left,m1)==weight(a,m1+1,m2)) {System.out.println("左右相等!");System.out.print("left="+left+" ");System.out.print("right="+right+" ");System.out.print("m1="+m1+" ");System.out.println("m2="+m2+" ");if ((right - m2) == 1)return right;else {left = m2 + 1;return find3(a, left, right);}}//第一堆比第二堆重,则在第二堆中找假币if (weight(a,left,m1)>weight(a,m1+1,m2)) {System.out.println("左大于右!");System.out.print("left="+left+" ");System.out.print("right="+right+" ");System.out.print("m1="+m1+" ");System.out.println("m2="+m2+" ");if ((m2 - m1) == 1)return m2;else {left = m1 + 1;right = m2;return find3(a, left, right);}}//第二堆比第一堆重,则在第一堆中找假币if (weight(a,left,m1)<weight(a,m1+1,m2)){System.out.println("左小于右!");System.out.print("left="+left+" ");System.out.print("right="+right+" ");System.out.print("m1="+m1+" ");System.out.println("m2="+m2+" ");if(m1==left){return left;} else {right=m1;return find3(a,left,right);}}return 0;}//计算硬币重量,即数组元素和float weight(float a[],int left,int right){float sum=0;for(int i=left;i<=right;i++){sum+=a[i];}return sum;}//对 n/3 的值向上取整int upint(int n){if((n%3)==0)return n/3;else return n/3+1;}}class test1{public static void main(String args[]){Test t=new Test();float a[]={1,1,1,1,1,1,1,1,1,1,1,0.4f,1,1,1};System.out.println("硬币个数为:"+a.length);System.out.println("硬币总重量为:"+t.weight(a,0,a.length-1));System.out.println("假币在数组中的下标为:"+t.find3(a,0,a.length-1));}
}
三分法解决假币问题(JAVA)相关推荐
- 解决Spring的java项目打包后执行出现“无法读取方案文档...“、“原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是...”问题
解决Spring的java项目打包后执行出现"无法读取方案文档..."."原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是..."问题 ...
- java语言就业方向_四大就业方向彻底解决你学习Java语言编程的后顾之忧-生活感悟与随笔
-亦是美网络...
前面的文章中已经给大家介绍了关于Java编程语言的优势.特点以及就业前景等内容,大家之所以这么热衷于Java编程学习,不仅是因为Java是编程市场上最为广泛流行的语言,大家更关心的是学习了Java编程 ...
- linux下java程序乱码,解决linux下java程序(例如applet)中文乱码问题
解决linux下java程序(例如applet)中文乱码问题 平台:Mandriva 2006.0 将Windows下的字体文件simsun.ttc拷贝到/usr/share/fonts/zh_CN, ...
- java提示程序包不存在,解决:Error:java xxxx 程序包不存在
java程序包不存在,解决:Error:java xxxx 程序包不存在 今天早上,一跑项目报错了.. java程序包不存在.我是小白啊,之前没有遇到过这种问题就赶紧查了查.终于解决了. 其实我遇到的 ...
- 解决Caused by: java.lang.NoClassDefFoundError: com/aliyun/oss/internal/OSSUdfOperation
解决Caused by: java.lang.NoClassDefFoundError: com/aliyun/oss/internal/OSSUdfOperation 版本出现冲突,高版本中找不到O ...
- 解决:Cause: java.sql.SQLException: Field ‘id‘ doesn‘t have a default value
解决:Cause: java.sql.SQLException: Field 'id' doesn't have a default value; nested exception is java.s ...
- 三分法解决凸(凹)函数极值问题
转自:三分法解决凸(凹)函数极值问题 二分法只适用与线性函数,当函数脱离线性而呈现凸性或者凹性的时候,三分是很有必要的. 三分过程如下图: 凸函数: 凹函数: 实现方法: //这个只是凸函数的一个模板 ...
- 解决IEDA编译java项目出现 library root ,编译缺少 rt.jar jce.jar
解决IEDA编译java项目出现 library root ,编译缺少 rt.jar jce.jar 问题 编译项目时,提示找不到rt.jar,编译添加后,出现缺少jce.jar,maven依赖项显示 ...
- 解决mysql和java中文乱码的问题
今天在做项目的时候,遇见了中文乱码的问题.之前也遇见过,一直没解决,干脆就不用中文了,但这次因为一些原因不得不用中文.所以找了一晚上,csdn的各个博客都被我翻遍了,还是没解决,不仅java里显示不了 ...
最新文章
- OpenCV各个模块/各个文件夹的含义
- JAVA处理 M_一次Java内存泄露处理手记
- Unity -----一些可能存在的错误
- C#语法:委托与事件
- NSIS打包软件使用
- checking size of char… configure: error: cannot compute sizeof (char) 解决方法
- 花花酱leetcode 题目——搜索专题
- 《坐热板凳》第八次团队作业:Alpha冲刺(第二天)
- javascript算法汇总(持续更新中)
- pos5890打印机测试软件,pos5890热敏票据打印机驱动
- 医院管理系统服务器,医院管理的十大运行系统!
- JAVA编写弹珠(弹珠)小游戏
- 系统时间不够精确?试试RTC(实时时钟)
- CSS实例(一):漂亮的表格样式(使用CSS样式表控制表格样式)
- git 交互式rebase
- 【字源大挪移—读书笔记】 第一部分:字首
- 【BDTC 2017】去年挤不进去的推荐系统论坛又来了!
- 区块链共识机制:POW、POS、DPOS、PBFT、POOL
- 逻辑漏洞挖掘之——逻辑漏洞概述
- 3元一集的超前点播付费模式,合理吗?