京东2016研发工程师编程题

上台阶

时间限制:3秒
空间限制:32768K
有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。
测试样例:
3
返回:2

思路:
fabonacci数列
注意:初始条件,一开始已经在第一级台阶上了!
代码

class GoUpstairs {
public:
    int countWays(int n) {
        // write code here
        int* dp = new int(n+1);
        dp[1] = 0;
        dp[2] = 1;
        dp[3] = 2;
        for(int i=4; i<=n; i++)
            dp[i] = (dp[i-1] + dp[i-2])%1000000007;
        return dp[n];
    }
};

小球的距离

时间限制:3秒
空间限制:32768K
小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数)
给定四个整数A,B,C,D,请返回所求结果。
测试样例:
100,90,80,70
返回:1020

代码

class Balls {
public:
    int calcOne(int A){
    int sum = A;
    while (A ){
        if (A % 2 == 1)
            sum += 1;
        sum += A;
        A = A / 2;
    }
    return sum;
}
int calcDistance(int A, int B, int C, int D) {
    // write code here
    return calcOne(A) + calcOne(B) + calcOne(C) + calcOne(D);
}
};

你可能感兴趣的:(公司编程真题)