• 2016京东编程题:抛小球


    题目描述

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

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

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

    感觉很简单,但是在double to int 上出现了问题,参看讨论有下面答案
    import java.util.*;
    
    public class Balls {
        public int calcDistance(int A, int B, int C, int D) {
            // write code here
            double result = 0.0;
            result = getDistance(A) + getDistance(B) + getDistance(C) + getDistance(D);
            return (int)result;
        }
        public double getDistance(double n){
            if(n==0)
                return 0;
            return n+n/2+getDistance(n/2);
        }
    }

    就是下面这样写不对头

     public double getDistance(double n){
            if(n==0)
                return 0;
            // return n+n/2+getDistance(n/2);
            double result = 0.0;
            
            while(n!=0){
                result +=n + n/2;
                n/=2;
            }
            return result;
        }

    这里我感觉应该是double的问题,后面的精度省略了,而通过递归都是相加的

    在讨论中,更神奇的就是直接求出答案,手敲了下面计算过程:

    答案直接就是3*(A+B+C+D)

  • 相关阅读:
    详解著名的awk Oneliner,第三部分:选择性输出特定行
    显示特定行
    nWave指令
    make 命令
    VIM脚本变量
    terninal 快捷键
    vim 实现begin end 配对 使用matchit插件
    VIM删除重复行
    linux命令--find(1)
    zabbix--创建触发器
  • 原文地址:https://www.cnblogs.com/theskulls/p/5384597.html
Copyright © 2020-2023  润新知