Java实现3次找到假球
前言
之前老师让写一个程序,就写了写,本文是我自己的写法。
正文
题目要求
程序要求
10个铅球中有一个假球(比其他铅球的重量要轻),用天平三次称出假球。
程序设计思路
第一次使用天平分别称5个球,判断轻的一边有假球;拿出轻的5个球,取出其中4个第二次称,两边分别放2个球:如果两边同重,则剩下的球为假球;若两边不同重,拿出轻的两个球称第三次,轻的为假球。
代码
注释应该还算详细哈。
public class Main {
// 计算数组中连续几个球的质量之和,区间是[startIndex,endIndex]
public static int sum(int[] balls,int startIndex, int endIndex){
int ret =0;
for(int i=startIndex;i<=endIndex;++i){
ret+=balls[i];
}
return ret;
}
// 输入balls是10个球的质量,该函数返回假球在该数组中的下标
public static int findFakeBall(int[] balls){
// 第一次称重,十个,五五分,默认左边五个球中有假球
int fiveStartIndex = 0;
// 如果右边五个球中有假球
if (sum(balls,5,9)<sum(balls,0,4)){
fiveStartIndex = 5;
}
// 第二次称重,五个,二一二分,默认左边两个球中有假球
int twoStartIndex = fiveStartIndex+0;
// 五个球中左边两个球的质量之和和右边两个球的质量之和
int leftTwoSum = sum(balls,fiveStartIndex+0,fiveStartIndex+1);
int rightTwoSum = sum(balls,fiveStartIndex+3,fiveStartIndex+4);
// 如果右边两个球中有假球
if(rightTwoSum<leftTwoSum){
twoStartIndex = fiveStartIndex+3;
// 如果左右两边的四个球中没有假球,则中间的球是假球
}else if(rightTwoSum==leftTwoSum){
return fiveStartIndex+2;
}
// 第三次称重
// 如果两个球中左边是假球
if(balls[twoStartIndex]<balls[twoStartIndex+1]){
return twoStartIndex;
// 如果两个球中右边是假球
}else{
return twoStartIndex+1;
}
}
// 对函数findFakeBall()进行测试
public static void main(String[] args) {
int[] balls = {5,10,10,10,10,10,10,10,10,10}; // 所有球的质量
int fakeIndex =findFakeBall(balls);
System.out.println(fakeIndex);
}
}
作者:@臭咸鱼
转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!
Java实现3次找到假球的更多相关文章
- JUnit白盒测试之基本路径测试:三次找到假球
前言 记录一次软件测试课程的课后作业,作业内容是白盒测试中的基本路径测试,步骤如下 分析程序的控制流 计算环形复杂度 找出基本路径 设计测试用例 执行测试用例(要求使用JUnit) 作业要求 使用白盒 ...
- java实现简单窗体小游戏----球球大作战
java实现简单窗体小游戏----球球大作战需求分析1.分析小球的属性: 坐标.大小.颜色.方向.速度 2.抽象类:Ball 设计类:BallMain—创建窗体 BallJPanel—画小 ...
- 在cmd窗口下运行Java程序时无法找到主类的解决办法
我是Java的初学者,昨天在cmd窗口下运行一段Java程序时总是有问题,可以编译但无法执行. 也就是javac时正确,一旦java时就不对了,提示找不到或无法加载主类,经百度谷歌再加上自己的摸索终于 ...
- JAVA优化篇 如何找到运行缓慢的线程
引入 JAVA提供了一些分析DUMP的工具,比如jmap,visualvm 等 JAVA还有寻找线程状态的工具,jstack等 数据库也有检查连接数,连接状态的命令,status,processlis ...
- Java实现 LeetCode 802 找到最终的安全状态 (DFS)
802. 找到最终的安全状态 在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走. 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止. 现在, 如果我们最后能走到终点,那么 ...
- Java实现 LeetCode 658 找到 K 个最接近的元素(暴力)
658. 找到 K 个最接近的元素 给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的.如果有两个数与 x 的差值一样,优先 ...
- Java实现 LeetCode 448 找到所有数组中消失的数字
448. 找到所有数组中消失的数字 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间 ...
- Java实现 LeetCode 438 找到字符串中所有字母异位词
438. 找到字符串中所有字母异位词 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p ...
- java 错误:无法找到或装入主类
1. 删除找不到的jar 2. 删除src以外的文件夹
随机推荐
- CSS+DIV自适应布局
CSS+DIV自适应布局 1.两列布局(左右两侧,左侧固定宽度200px;右侧自适应占满) 代码如下: <!doctype html> <html> <head> ...
- 【Geek议题】合理的VueSPA架构讨论(上)
前言 web前端发展到现代,已经不再是严格意义上的后端MVC的V层,它越来越向类似客户端开发的方向发展,已独立拥有了自己的MVVM设计模型.前后端的分离也使前端人员拥有更大的自由,可以独立设计客户端部 ...
- TensorFlow入门知识
Tensorflow基本操作 Tensorflow是一种计算图模型,即用图的形式来表示运算过程的一种模型.Tensorflow程序一般分为图的构建和图的执行两个阶段.图的构建阶段也称为图的定义阶段,该 ...
- url,href和src的区别,defer和async的区别
URL(Uniform Resource Locator):统一资源定位符,互联网上的每个文件都有一个唯一的URL,基本URL包含协议,IP地址,路径和文件名. 重点:herf和src的区别 href ...
- Oracle - 坏块修复(一)
一.概述 本文将介绍如何模拟坏块,以及出现坏块该如何修复.实验分为以下几个步骤. 1. 表出现坏块 2. 索引出现坏块 二.环境准备 本实验都是在oracle 11G归档模式下进行. 1. 准备相关表 ...
- django使用户名和邮箱都能登录
为了能够让邮箱也能登录,需要重新定义认证功能,需要把email添加成username用于认证 定义的class继承ModelBackend,使用Q方法并集 然后在settings.py里面添加 这样既 ...
- xadmin安装和配置
1.在虚拟环境pip install xadmin 2.安装完成之后在settings.py的install app里面添加xadmin和crispy_forms 3.在主项目url里面把原来的adm ...
- Java基础(五):数组
数组,一种应用非常广泛的数据结构,简单地来说就是一组类型相同且无序的元素的存储在固定长度且有序的内存空间. 创建一个数组 在Java中,我们可以通过[]去声明一个指定类型的数组 int[] a; // ...
- tensorflow一些API的基本理解
1.tf.Session self._session = None opts = tf_session.TF_NewSessionOptions(target=self._target, config ...
- 13.unittest扩展