上台阶
时间限制: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);
}
};