小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推直到全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数)
给定四个整数A,B,C,D,请返回所求结果。
测试样例:
100,90,80,70
返回:1020
import java.util.*; public class Balls { double distance(double n){ if(n==0) return 0; return n+n/2+distance(n/2); } public int calcDistance(int A, int B, int C, int D) { return (int)(distance(A)+distance(B)+distance(C)+distance(D)); } }这题想要的思路应该是这样的,注意大转小需要强制转化。
# 1. 除法要为浮点数除法 2.结果要向上取整 # -*- coding:utf-8 -*- import math class Balls: def hight(self, h): sum = h while(h!=0): h=float(h)/2 #只有python2的环境,所以要先转化h为浮点数进行除法 sum+=2*h return math.ceil(sum) #向上取整 def calcDistance(self, A, B, C, D): # write code here return self.hight(A)+self.hight(B)+self.hight(C)+self.hight(D)
大家的极限真的是6666,给大佬递百事可乐
package com.special.first;
import java.util.Scanner;
/**
* 京东02-抛小球
*
* 以前做过,不过现在做这个题,我有了更好的思路
*
* 因为我们发现下一次的弹跳的高度为上一次的一半
* 但又因为弹上去后又落下相同的高度,所以下一次弹跳的总长度等于上一次的弹跳高度
* 所以我们用一个变量表示上一次的弹跳的高度
* 当我们计算下一次弹跳的总长度时就可以直接加上上一次的弹跳高度
* 并更新弹跳高度作为下一次弹跳使用
* Create by Special on 2018/3/4 14:56
*/
public class Pro039 {
private static double calcDistance(double dis){
double result = dis;
while(dis != 0){
result += dis;
dis /= 2;
}
return result;
}
public static int calcDistance(int A, int B, int C, int D) {
return (int) Math.ceil(calcDistance(A) + calcDistance(B)
+ calcDistance(C) + calcDistance(D));
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(input.hasNext()){
int A = input.nextInt();
int B = input.nextInt();
int C = input.nextInt();
int D = input.nextInt();
System.out.println(calcDistance(A, B, C, D));
}
}
}
class Balls { public: int calcDistance(int A, int B, int C, int D) { /*求极限的题,设首次下落高度为X,则落地后弹回1/2除,但一上一下,行程为2倍。故第一次落地到弹起共走了1/2X+1/2X=X 故总路程为 X + (X + 1/2 X + 1/4 X + 1/8 X + ~~~ + 趋于0) 括号内为等比数列 等比数列求和公式 Sn = lim(a1 * (1 - q^n)/1-q) = X*(1)/0.5 = 2X 总路程为 3 X */ int sum = (A+B+C+D)*3 ; return sum; } };
sn = x + x * (1 + 1/2 + 1/4 + ... + (1/2)^m)
sn = x + x * (1- (1/2)^m) / (1-1/2)
(1/2)^m 无限接近于0
sn = x + x * 2;
sn = 3x;
所以答案为 3*(A+B+C+D)
不知道这样说对不。。。