面试题随手练习(一)

来源:互联网 发布:背包问题 动态规划java 编辑:程序博客网 时间:2024/06/06 14:34

昨天小张哥面试,有四道上机题,我也想尝试着做做,就当解闷儿了,但是在做的过程中,还是发现了基础薄弱的地方。

第一道题:

算自由落体运动的弹力球,经过10次反弹后(每次消耗1/2能量)弹起的高度,以及经过的路程。

思路:

1.如果从10米落下,在弹起的高度就是5米,2.5米。。。
2.求和的次数比10次少一次,因为定义的sum初值就是球的初始高度

容易出错的地方:

1.每次加的1/2前一次的高度,开始我写的是递归调用,但是没有写对,因为我忽略了这是传值调用,所以方法中改变了high的高度,这只是复制出了一份,而原来的high还是10

for(int i=0 ;i<2;i++){   sum+=getNextHigh(high);}public double getNextHigh(Double high)    {        return high/2;    }


2. (反弹三次为例)开始我算的总路程就是:10+5+2.5,最后发现还有回落的路程,所以应该是:10+5*2+2.5*2

代码实现:

import java.util.Scanner;public class Main {    private Double high;    public static void main(String[] args) {        Main a=new Main();        Double sum;        Scanner input = new Scanner(System.in);        System.out.println("请输入高度:");        a.high = input.nextDouble();        sum=a.high;        for(int i=0 ;i<9;i++){            a.nextHight();            sum+=a.high*2;        }        System.out.println("弹起总高度为:"+sum+"米");        System.out.print("最后一次高度为"+a.high+"米");    }    public void nextHight(){        this.high=this.high/2;    }}
原创粉丝点击