程序解决十苹果问题 Java

题目:10个苹果,其中有9个重量相同,剩余1个相比其它重量不同(或重或轻,不得而知),使用天平比较三次,找出重量特殊的那一个

  1. import org.junit.Test;
  2. import java.util.Random;
  3. public class MyUtil {
  4. class Apple {
  5. public int weight;
  6. public Apple(int weight) {
  7. this.weight = weight;
  8. }
  9. }
  10. @Test
  11. public void test() {
  12. int special = tenApples(50, 51);
  13. System.out.println("**********************");
  14. System.out.println(special);
  15. }
  16. /**
  17. * 10个苹果,其中有9个重量相同,剩余1个相比其它重量不同(或重或轻,不得而知),使用天平比较三次,返回特殊苹果的下标
  18. * @param normalWeight 普通苹果的重量
  19. * @param specialWeight 特殊苹果的重量
  20. * @return 特殊苹果的下标
  21. */
  22. public int tenApples(int normalWeight, int specialWeight) {
  23. Random random = new Random();
  24. //产生一个 0 - 9 的随机数,用来确定特殊重量苹果的下标
  25. int specialIndex = random.nextInt(9);
  26. System.out.println("---------------------");
  27. System.out.println(specialIndex);
  28. //定义10个苹果
  29. Apple[] apples = new Apple[10];
  30. //构造10个苹果
  31. for (int i = 0; i < 10; ++i) {
  32. if(i == specialIndex) {
  33. apples[i] = new Apple(specialWeight);
  34. }else {
  35. apples[i] = new Apple(normalWeight);
  36. }
  37. }
  38. //将第0个到第2个苹果放在一起(第一堆),第3个到第5个苹果放在一起(第二堆),第6个到第8个苹果放在一起(第三堆)
  39. int weight0to2 = apples[0].weight + apples[1].weight + apples[2].weight;
  40. int weight3to5 = apples[3].weight + apples[4].weight + apples[5].weight;
  41. int weight6to8 = apples[6].weight + apples[7].weight + apples[8].weight;
  42. //第一次用天平比较,确定第一堆和第二堆是否一样重
  43. if(weight0to2 == weight3to5) {
  44. /*
  45. 在确定第一堆和第二堆一样重的情况下,进行第二次比较,确定第一堆和第三堆是否一样重,如果是,说明特殊苹果是第9个;
  46. 如果不是,说明特殊苹果在第三堆中,并且如果第一堆苹果比第三堆重,说明特殊的那个苹果比普通苹果轻,否则说明特殊的那个苹果比普通苹果重
  47. */
  48. if(weight0to2 == weight6to8) {
  49. return 9;
  50. }
  51. /*
  52. 在确定特殊苹果在第三堆中的情况下,进行第三次比较,如果第6个和第7个苹果一样重,则可以确定特殊苹果是第8个;如果不是一样重,
  53. 就要看那个特殊的苹果比普通苹果重还是轻,如果重,则第6个和第7个中较重的那个是特殊苹果,反之则较轻的那个是特殊苹果。
  54. */
  55. if (apples[6].weight == apples[7].weight) {
  56. return 8;
  57. }
  58. if (weight0to2 > weight6to8) {
  59. return apples[6].weight > apples[7].weight ? 7 : 6;
  60. }
  61. return apples[6].weight > apples[7].weight ? 6 : 7;
  62. }
  63. /*
  64. 在确定第一堆和第二堆不一样重的情况下,进行第二次比较,确定第一堆和第三堆是否一样重,如果是,说明特殊苹果在第二堆中,
  65. 并且如果第一堆苹果比第二堆重,说明特殊的那个苹果比普通苹果轻,否则说明特殊的那个苹果比普通苹果重。
  66. 如果第一堆和第三堆不一样重,说明特殊苹果在第一堆中。并且如果第一堆苹果比第三堆重,说明特殊的那个苹果比普通苹果重,
  67. 否则说明特殊的那个苹果比普通苹果轻
  68. */
  69. if(weight0to2 == weight6to8) {
  70. /*
  71. 第一堆和第三堆一样重,确定特殊苹果在第二堆中,进行第三次比较,如果第3个苹果和第4个苹果一样重,则特殊苹果是第5个;
  72. 如果不是一样重,就要看那个特殊的苹果比普通苹果重还是轻,如果重,则第3个和第4个中较重的那个是特殊苹果,
  73. 反之则较轻的那个是特殊苹果。
  74. */
  75. if(apples[3].weight == apples[4].weight) {
  76. return 5;
  77. }
  78. if(weight0to2 > weight3to5) {
  79. return apples[3].weight > apples[4].weight ? 4 : 3;
  80. }
  81. return apples[3].weight > apples[4].weight ? 3 : 4;
  82. }
  83. /*
  84. 第一堆和第三堆不一样重,确定特殊苹果在第一堆中,进行第三次比较,如果第0个苹果和第1个苹果一样重,则特殊苹果是第2个;
  85. 如果不是一样重,就要看那个特殊的苹果比普通苹果重还是轻,如果重,则第0个和第1个中较重的那个是特殊苹果,
  86. 反之则较轻的那个是特殊苹果。
  87. */
  88. if(apples[0].weight == apples[1].weight) {
  89. return 2;
  90. }
  91. if(weight0to2 > weight3to5) {
  92. return apples[0].weight > apples[1].weight ? 0 : 1;
  93. }
  94. return apples[0].weight > apples[1].weight ? 1 : 0;
  95. }
  96. }

程序解决十苹果问题 Java的更多相关文章

  1. mac下需要安装旧 Java SE 6 才能打开程序解决办法

    今天我在mac系统下面安装myeclipse2014(myeclipse-pro-2014-GA-offline-installer-macosx.dmg)的时候,发现显示错误: 您需要安装旧 Jav ...

  2. 20155301第十二周java课程程序

    20155301第十二周java课程程序 内容一:在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 String类 charAt split Ar ...

  3. 20145330第十周《Java学习笔记》

    20145330第十周<Java学习笔记> 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就 ...

  4. 黑马程序员:轻松精通Java学习路线连载1-基础篇!

    编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...

  5. 20155234 2016-2017-2第十周《Java学习笔记》学习总结

    20155234第十周<Java学习笔记>学习总结 教材学习内容总结 网络编程 在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定 ...

  6. 《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  7. 《手把手教你》系列技巧篇(二十八)-java+ selenium自动化测试-处理模态对话框弹窗(详解教程)

    1.简介 在前边的文章中窗口句柄切换宏哥介绍了switchTo方法,这篇继续介绍switchTo中关于处理alert弹窗的问题.很多时候,我们进入一个网站,就会弹窗一个alert框,有些我们直接关闭, ...

  8. Java学习笔记(十九)——Java 日志记录 AND log4j

    [前面的话] 学习的进度应该稍微在快一点. Java日志到了必须学习怎么使用的时候了,因为在项目中要进行使用.基础性文章,选择性阅读. [结构] java日志对调试,记录运行,问题定位都起到了很重要的 ...

  9. 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

    摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...

随机推荐

  1. 第十三篇 -- QMainWindow与QAction(新建-打开-保存)

    效果图: 添加了三个Action,分别是新建,打开,和保存,没有具体写相应的功能,只是提供了一个接口,可以自己写相应的功能.这次不仅将这些Action放在了工具栏,还将其添加到了菜单栏.方法同样是直接 ...

  2. 2021年BI软件排名,国内外BI软件功能对比

    数据分析是帮助企业深入了解自身业务表现(例如正在做什么或哪块业务需要注意和改进)的重要元素.为了获得更直观的展现,数据分析BI软件可帮助公司通过报告.数据可视化.应用程序等从数据中获取决策数据支撑.没 ...

  3. YGC问题排查

    在高并发下, Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大. 不管是 「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导 ...

  4. 【奇妙的JavaScript】# 1

    奇妙的JavaScript 本专题整理了一些JavaScript的怪异行为,大部分都是选择题,题目都是简单的表达式.可以测试你有多了解 JavaScript,拓宽你的认知边界! 该专题计划每周更新1- ...

  5. JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)

    检测

  6. 大数据学习(26)—— Spark之RDD

    做大数据一定要有一个概念,需要处理的数据量非常大,少则几十T,多则上百P,全部放内存是不可能的,会OOM,必须要用迭代器一条一条处理. RDD叫做弹性分布式数据集,是早期Spark最核心的概念,是一种 ...

  7. 比@EnableMongoAuditing功能强大的实现

    问题出现 以前通过@EnableMongoAuditing.@CreateDate.@LastModifiedDate进行实体类创建时间.修改时间的自动管理. 但为了实现多数据源的管理以及切换,自己覆 ...

  8. Linux下-LNMP环境搭建博客网站(全过程)

    通常我们所说的LNMP是指一个网站基本的组织框架,即Linux系统支持,Nginx静态服务,Mysql数据库支持以及PHP动态编程语言支持.目前Mysql数据库被Oracle数据库分析公司收购,其创始 ...

  9. C++11 noexcept 关键字用法学习

    最近学习和写了一个 mint 的板子 ,其中用到了 noexcept 关键字,对这个关键字不太熟悉,便学习一下刘毅学长的文章. C++98 中的异常规范(Exception Specification ...

  10. Android开发失业六个月了,无限的焦虑

    最近到网上看到这样一个帖子: Android开发,坐标魔都:目前为止已经失业六个月,找工作期间,尤其是最近两天确实心态不好.要么没有面试,要么给的工资不符合预期( hr 压价太狠了,原先说的 19k, ...