程序解决十苹果问题 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;
}
}

最新文章

  1. java web系统中时间比sql server中的日期少2天的解决办法
  2. ural 1244. Gentlemen
  3. Phaser.Game这个函数都有哪些参数
  4. Session为null 问题
  5. 批量导出表数据到CSV文件
  6. 在picture library中取某一图片的大图、小图
  7. React文档翻译系列(二)Hello World
  8. 吴恩达机器学习笔记28-多类分类(Multiclass Classification)
  9. 【RSYSLOG】The Property Replacer【转】
  10. 洛谷P4689 [Ynoi2016]这是我自己的发明(莫队,树的dfn序,map,容斥原理)
  11. 通过wui登陆 sap 页面对数据进行高级 搜索
  12. spring学习 四 对象的创建
  13. Java编程的逻辑 (7) - 如何从乱码中恢复 (下)?
  14. 使用createprocess()创建进程打开其他文件方法
  15. Linux基础操作-分区概念
  16. ThinkPHP导入第三方类库Vendor
  17. 洛谷P4151 [WC2011] 最大XOR和路径 [线性基,DFS]
  18. 如何屏蔽PHP浏览器头信息X-Powered-By
  19. 在Docker和Kubernetes上运行MongoDB微服务
  20. sails route(1) -用户定义路由

热门文章

  1. python中的生成器,迭代器及列表生成式
  2. 记录一次HSDB的使用遇到的问题 No such type.
  3. PWA渐进式web应用
  4. Django &lt; 2.0.8 任意URL跳转漏洞(CVE-2018-14574)
  5. Adaptive AUTOSAR 学习笔记 14 - 车辆诊断
  6. Spring IOC容器核心流程源码分析
  7. rancherUI添加configmap
  8. Git 使用revert回滚已提交的commit
  9. Spring MVC+javamail实现邮件发送
  10. Git(6)-- 记录每次更新到仓库(git clone、status、add、diff、commit、rm、mv命令详解)