前言

之前老师让写一个程序,就写了写,本文是我自己的写法。

这里有老师的Java实现代码,请点击

正文

题目要求

  • 程序要求

    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次找到假球的更多相关文章

  1. JUnit白盒测试之基本路径测试:三次找到假球

    前言 记录一次软件测试课程的课后作业,作业内容是白盒测试中的基本路径测试,步骤如下 分析程序的控制流 计算环形复杂度 找出基本路径 设计测试用例 执行测试用例(要求使用JUnit) 作业要求 使用白盒 ...

  2. java实现简单窗体小游戏----球球大作战

    java实现简单窗体小游戏----球球大作战需求分析1.分析小球的属性: ​ 坐标.大小.颜色.方向.速度 2.抽象类:Ball ​ 设计类:BallMain—创建窗体 ​ BallJPanel—画小 ...

  3. 在cmd窗口下运行Java程序时无法找到主类的解决办法

    我是Java的初学者,昨天在cmd窗口下运行一段Java程序时总是有问题,可以编译但无法执行. 也就是javac时正确,一旦java时就不对了,提示找不到或无法加载主类,经百度谷歌再加上自己的摸索终于 ...

  4. JAVA优化篇 如何找到运行缓慢的线程

    引入 JAVA提供了一些分析DUMP的工具,比如jmap,visualvm 等 JAVA还有寻找线程状态的工具,jstack等 数据库也有检查连接数,连接状态的命令,status,processlis ...

  5. Java实现 LeetCode 802 找到最终的安全状态 (DFS)

    802. 找到最终的安全状态 在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走. 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止. 现在, 如果我们最后能走到终点,那么 ...

  6. Java实现 LeetCode 658 找到 K 个最接近的元素(暴力)

    658. 找到 K 个最接近的元素 给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的.如果有两个数与 x 的差值一样,优先 ...

  7. Java实现 LeetCode 448 找到所有数组中消失的数字

    448. 找到所有数组中消失的数字 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间 ...

  8. Java实现 LeetCode 438 找到字符串中所有字母异位词

    438. 找到字符串中所有字母异位词 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p ...

  9. java 错误:无法找到或装入主类

    1. 删除找不到的jar 2. 删除src以外的文件夹

随机推荐

  1. 前端每日实战:31# 视频演示如何利用 CSS 的动画原理,创作一个乒乓球对打动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/rvgLzK 可交互视频教程 此视频 ...

  2. 2020最新ArchLinux安装(KDE桌面)

    许多网友反映之前的教程安装好后连不上互联网,最近我刚好又安装了一遍,总结出以下没毛病的过程 按照此教程需要你会基本的vim操作(或其他文本编辑工具比如nano),基本的fdisk分盘操作(或其他分盘工 ...

  3. java CRC16 算法

    代码摘自:https://www.cnblogs.com/lujiannt/p/9246256.html 1.CRC16算法 public class CRC16Util { /** * 计算CRC1 ...

  4. 写一个scrapy中间件--ip代理池

    middleware文件 # -*- coding: utf-8 -*- # Define here the models for your spider middleware # See docum ...

  5. vue基础 ref的作用

    1.  ref 获取dom元素,除了能获取dom元素也能获取组件dom,   组件通信:        在父组件中直接调用ref定义的组件的数据或者方法 <div id="app&qu ...

  6. Spring注解 - 生命周期、属性赋值、自动装配

    一.Bean的生命周期 流程 Bean创建 -- 初始化 -- 销毁 创建: 单实例:在容器启动时创建对象 多实例:每次调用时创建对象 初始化: 都是在对象创建完成后,调用初始化方法 销毁: 单实例: ...

  7. vue cli3 的 eslint 修改为4个空格

    只需要修改如下两个文件

  8. 【Weiss】【第03章】练习3.16:删除相同元素

    [练习3.16] 假设我们有一个基于数组的表A[0,1...N-1],并且我们想删除所有相同的元素. LastPosition初始值为N-1,但应该随着相同元素被删除而变得越来越小. 考虑图3-61中 ...

  9. Spring Boot入门系列(八)整合定时任务Task,一秒搞定定时任务

    前面介绍了Spring Boot 中的整合Redis缓存已经如何实现数据缓存功能.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/categ ...

  10. 一个简单的方法去掉angular application中URLs的hashtag

    本文转载自:Pretty URLs in AngularJS: Removing the # By default, AngularJS will route URLs with a hashtag. ...