一,问题描述

有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)相关推荐

  1. 解决Spring的java项目打包后执行出现“无法读取方案文档...“、“原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是...”问题

    解决Spring的java项目打包后执行出现"无法读取方案文档..."."原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是..."问题 ...

  2. java语言就业方向_四大就业方向彻底解决你学习Java语言编程的后顾之忧-生活感悟与随笔 -亦是美网络...

    前面的文章中已经给大家介绍了关于Java编程语言的优势.特点以及就业前景等内容,大家之所以这么热衷于Java编程学习,不仅是因为Java是编程市场上最为广泛流行的语言,大家更关心的是学习了Java编程 ...

  3. linux下java程序乱码,解决linux下java程序(例如applet)中文乱码问题

    解决linux下java程序(例如applet)中文乱码问题 平台:Mandriva 2006.0 将Windows下的字体文件simsun.ttc拷贝到/usr/share/fonts/zh_CN, ...

  4. java提示程序包不存在,解决:Error:java xxxx 程序包不存在

    java程序包不存在,解决:Error:java xxxx 程序包不存在 今天早上,一跑项目报错了.. java程序包不存在.我是小白啊,之前没有遇到过这种问题就赶紧查了查.终于解决了. 其实我遇到的 ...

  5. 解决Caused by: java.lang.NoClassDefFoundError: com/aliyun/oss/internal/OSSUdfOperation

    解决Caused by: java.lang.NoClassDefFoundError: com/aliyun/oss/internal/OSSUdfOperation 版本出现冲突,高版本中找不到O ...

  6. 解决: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 ...

  7. 三分法解决凸(凹)函数极值问题​​​​​​​

    转自:三分法解决凸(凹)函数极值问题 二分法只适用与线性函数,当函数脱离线性而呈现凸性或者凹性的时候,三分是很有必要的. 三分过程如下图: 凸函数: 凹函数: 实现方法: //这个只是凸函数的一个模板 ...

  8. 解决IEDA编译java项目出现 library root ,编译缺少 rt.jar jce.jar

    解决IEDA编译java项目出现 library root ,编译缺少 rt.jar jce.jar 问题 编译项目时,提示找不到rt.jar,编译添加后,出现缺少jce.jar,maven依赖项显示 ...

  9. 解决mysql和java中文乱码的问题

    今天在做项目的时候,遇见了中文乱码的问题.之前也遇见过,一直没解决,干脆就不用中文了,但这次因为一些原因不得不用中文.所以找了一晚上,csdn的各个博客都被我翻遍了,还是没解决,不仅java里显示不了 ...

最新文章

  1. OpenCV各个模块/各个文件夹的含义
  2. JAVA处理 M_一次Java内存泄露处理手记
  3. Unity -----一些可能存在的错误
  4. C#语法:委托与事件
  5. NSIS打包软件使用
  6. checking size of char… configure: error: cannot compute sizeof (char) 解决方法
  7. 花花酱leetcode 题目——搜索专题
  8. 《坐热板凳》第八次团队作业:Alpha冲刺(第二天)
  9. javascript算法汇总(持续更新中)
  10. pos5890打印机测试软件,pos5890热敏票据打印机驱动
  11. 医院管理系统服务器,医院管理的十大运行系统!
  12. JAVA编写弹珠(弹珠)小游戏
  13. 系统时间不够精确?试试RTC(实时时钟)
  14. CSS实例(一):漂亮的表格样式(使用CSS样式表控制表格样式)
  15. git 交互式rebase
  16. 【字源大挪移—读书笔记】 第一部分:字首
  17. 【BDTC 2017】去年挤不进去的推荐系统论坛又来了!
  18. 区块链共识机制:POW、POS、DPOS、PBFT、POOL
  19. 逻辑漏洞挖掘之——逻辑漏洞概述
  20. 3元一集的超前点播付费模式,合理吗?

热门文章

  1. LiteOS通信模组教程05-LiteOS的SAL及socket编程实例
  2. React当中使用TS
  3. 国家统计局固定资产投资统计
  4. chrome查看请求加载时间
  5. 12c oracle 01109,Oracle 12c redo 丢失恢复
  6. Navicat Premium链接MySQL时出现2059错误解决方法
  7. Matlab向量场可视化
  8. Android和iOS接入Appsflyer SDK
  9. LTD营销SaaS产品-官微名片介绍
  10. 杭州一公司开20万月薪抢AIGC算法工程师;SpaceX「星舰」发射任务失败;华为宣布实现ERP自主可控,突破封锁|极客头条