程序解决十苹果问题 Java

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

import org.junit.Test;
import java.util.Random; public class MyUtil {
class Apple {
public int weight;
public Apple(int weight) {
this.weight = weight;
}
} @Test
public void test() {
int special = tenApples(50, 51);
System.out.println("**********************");
System.out.println(special);
} /**
* 10个苹果,其中有9个重量相同,剩余1个相比其它重量不同(或重或轻,不得而知),使用天平比较三次,返回特殊苹果的下标
* @param normalWeight 普通苹果的重量
* @param specialWeight 特殊苹果的重量
* @return 特殊苹果的下标
*/
public int tenApples(int normalWeight, int specialWeight) {
Random random = new Random();
//产生一个 0 - 9 的随机数,用来确定特殊重量苹果的下标
int specialIndex = random.nextInt(9);
System.out.println("---------------------");
System.out.println(specialIndex);
//定义10个苹果
Apple[] apples = new Apple[10];
//构造10个苹果
for (int i = 0; i < 10; ++i) {
if(i == specialIndex) {
apples[i] = new Apple(specialWeight);
}else {
apples[i] = new Apple(normalWeight);
}
}
//将第0个到第2个苹果放在一起(第一堆),第3个到第5个苹果放在一起(第二堆),第6个到第8个苹果放在一起(第三堆)
int weight0to2 = apples[0].weight + apples[1].weight + apples[2].weight;
int weight3to5 = apples[3].weight + apples[4].weight + apples[5].weight;
int weight6to8 = apples[6].weight + apples[7].weight + apples[8].weight;
//第一次用天平比较,确定第一堆和第二堆是否一样重
if(weight0to2 == weight3to5) {
/*
在确定第一堆和第二堆一样重的情况下,进行第二次比较,确定第一堆和第三堆是否一样重,如果是,说明特殊苹果是第9个;
如果不是,说明特殊苹果在第三堆中,并且如果第一堆苹果比第三堆重,说明特殊的那个苹果比普通苹果轻,否则说明特殊的那个苹果比普通苹果重
*/
if(weight0to2 == weight6to8) {
return 9;
}
/*
在确定特殊苹果在第三堆中的情况下,进行第三次比较,如果第6个和第7个苹果一样重,则可以确定特殊苹果是第8个;如果不是一样重,
就要看那个特殊的苹果比普通苹果重还是轻,如果重,则第6个和第7个中较重的那个是特殊苹果,反之则较轻的那个是特殊苹果。
*/
if (apples[6].weight == apples[7].weight) {
return 8;
}
if (weight0to2 > weight6to8) {
return apples[6].weight > apples[7].weight ? 7 : 6;
}
return apples[6].weight > apples[7].weight ? 6 : 7;
}
/*
在确定第一堆和第二堆不一样重的情况下,进行第二次比较,确定第一堆和第三堆是否一样重,如果是,说明特殊苹果在第二堆中,
并且如果第一堆苹果比第二堆重,说明特殊的那个苹果比普通苹果轻,否则说明特殊的那个苹果比普通苹果重。
如果第一堆和第三堆不一样重,说明特殊苹果在第一堆中。并且如果第一堆苹果比第三堆重,说明特殊的那个苹果比普通苹果重,
否则说明特殊的那个苹果比普通苹果轻
*/
if(weight0to2 == weight6to8) {
/*
第一堆和第三堆一样重,确定特殊苹果在第二堆中,进行第三次比较,如果第3个苹果和第4个苹果一样重,则特殊苹果是第5个;
如果不是一样重,就要看那个特殊的苹果比普通苹果重还是轻,如果重,则第3个和第4个中较重的那个是特殊苹果,
反之则较轻的那个是特殊苹果。
*/
if(apples[3].weight == apples[4].weight) {
return 5;
}
if(weight0to2 > weight3to5) {
return apples[3].weight > apples[4].weight ? 4 : 3;
}
return apples[3].weight > apples[4].weight ? 3 : 4;
}
/*
第一堆和第三堆不一样重,确定特殊苹果在第一堆中,进行第三次比较,如果第0个苹果和第1个苹果一样重,则特殊苹果是第2个;
如果不是一样重,就要看那个特殊的苹果比普通苹果重还是轻,如果重,则第0个和第1个中较重的那个是特殊苹果,
反之则较轻的那个是特殊苹果。
*/
if(apples[0].weight == apples[1].weight) {
return 2;
}
if(weight0to2 > weight3to5) {
return apples[0].weight > apples[1].weight ? 0 : 1;
}
return apples[0].weight > apples[1].weight ? 1 : 0;
}
}

程序解决十苹果问题 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. python3中的缺省参数和global

    关于py中缺省参数: 在声明函数的时候对某些参数(一个或多个)进行赋值,在你调用的时候无需在实参列表中体现该参数,但是在执行的时候会默认加上这个已经在形参中定义好的参数. 但是,缺省参数必须放在最后, ...

  2. 解决org.hibernate.LazyInitializationException的正确姿势

    项目运行过程中,一个报错信息,报错信息如下: org.hibernate.LazyInitializationException: could not initialize proxy [xxx.do ...

  3. ifix 自动化(Automation)错误弹窗的解决方案

    在先前ifix项目中添加了语音模块,然后概率性跳出自动化(Automation)错误弹窗,先前分析了很多种原因,从代码的冗余,编码等角度进行了优化,效果不是很理想,仍然会概率性出现.经过反反复复大约3 ...

  4. SaltStack 水平权限绕过漏洞(CVE-2020-11651)

    影响版本 SaltStack < 2019.2.4 SaltStack < 3000.2 poc git clone https://github.com/jasperla/CVE-202 ...

  5. 【LeetCode】34. 在排序数组中查找元素的第一个和最后一个位置

    34. 在排序数组中查找元素的第一个和最后一个位置 知识点:数组,二分查找: 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置 ...

  6. DNS反向解析,主从服务器,分离解析(内外网)

    目录 实验一:DNS反向解析 1.安装bind 2.查找配置文件路径 3.配置/etc/named.conf主配置文件 4.修改/etc/named.rfc1912.zones区域配置文件(复制两个) ...

  7. Hybrid接口

    目录 一.Hybrid接口 1.1 VLan的基本概念 1.2 Hybrid接口特点 1.3 Hybrid接口工作原理 1.4 Hybrid配置 一.Hybrid接口 1.1 VLan的基本概念 特点 ...

  8. 攻防世界逆向——game

    攻防世界逆向:game wp 攻防世界逆向新手区的一道题目. 是一道windows的creak,动态调试打开是这样的: 题目说明是让屏幕上所有的图像都亮之后,会出现flag,看来应该是可以玩出来的. ...

  9. 高楼扔鸡蛋问题(鹰蛋问题) POJ-3783

    这是一道经典的DP模板题. https://vjudge.net/problem/POJ-3783#author=Herlo 一开始也是不知道咋写,尝试找了很多博客,感觉有点领悟之后写下自己的理解. ...

  10. Python - typing 模块 —— TypeVar 泛型

    前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...