• 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 }
     
  • 相关阅读:
    ABP框架系列之三十六:(MVC-Views-MVC视图)
    ABP框架系列之三十五:(MVC-Controllers-MVC控制器)
    ABP框架系列之三十四:(Multi-Tenancy-多租户)
    ABP框架系列之三十三:(Module-System-模块系统)
    2-kong的preserve_host和strip_uri解析
    2-Consul简介
    1-Consul系列文章
    1-Kong文章记录
    1-ES学些教程
    0-Jenkins系列学习文章
  • 原文地址:https://www.cnblogs.com/wangchaoyuan/p/5967720.html
Copyright © 2020-2023  润新知