2016校招真题之小球的距离

Posted 啊远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2016校招真题之小球的距离相关的知识,希望对你有一定的参考价值。

1、题目描述

小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数)

给定四个整数A,B,C,D,请返回所求结果。

测试样例:
100,90,80,70
返回:1020
 

2、代码实现

 1 package com.wcy.october;
 2 
 3 /**
 4  * 时间:2016年10月16日 题目:小球的距离
 5  * 题目描述:小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,
 6  * 并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数),给定四个整数A,B,C,D,请返回所求结果。
 7  * 测试样例:100,90,80,70 返回:1020
 8  * 解题思路:刚开始做这个题受到了括号里 数字都为整数的误导,以为落地距离是5米,弹起后2米(5/2自动取整)。算出来结果不对,变小了。所以,不是自动取整。
 9  * 就是所有的都算进去,这就牵扯到数学上的极限思想了。除了最开始的下落高度只加一次外,以后的弹起下落都是两倍的距离。举个例子,下落高度是x米,则有下落后弹
10  * 起的高度是x/2,再落下去,又走了一个x/2,依此类推,一直下去,也就是总距离为x+2*x(1/2+1/4+1/8+……),而括号中的数列是一个等比数列,其极
11  * 限求和的结果就是1。所以总距离就是3*x。推理到这里,就发现写程序只需要一行关键代码就可以。
12  */
13 public class Balls {
14 
15     public int calcDistance(int A, int B, int C, int D) {
16         return 3*(A+B+C+D);
17     }
18 
19     public static void main(String[] args) {
20         Balls balls = new Balls();
21         int result = balls.calcDistance(100, 90, 80, 70);
22         System.out.println(result);
23     }
24 }

 

 

以上是关于2016校招真题之小球的距离的主要内容,如果未能解决你的问题,请参考以下文章

2016校招真题之数组单调和

2016校招真题之串的模式匹配

牛客网2016校招真题在线编程之懂二进制

2016校招真题编程-懂二进制

(待更新)校招Verilog手撕代码(真题)VL16单bit信号毛刺滤除电路设计

蓝桥杯选拔赛真题23python小球反弹 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析