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 }
时间: 2024-12-27 09:30:32