上台阶
有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。
测试样例:
3
返回:2
找规律,斐波那契数列。
#include <iostream>
using namespace std;
int coutWays(int n){
int i=0;
if(n==1){
return 0;
}else if(n==2){
return 1;
}else{
int n1=1;
int n2=1;
int n3;
for(int i=0;i<n-2;i++){
n3=(n1+n2)%1000000007;
n1=n2;
n2=n3;
}
return n3;
}
}
int main(){
coutWays(6);
system("pause");
}
使用递归实现:
#include <iostream>
using namespace std;
int count=0;
void coutWays(int n){
if(n==1)
count++;
else if(n>1){
coutWays(n-1); //走一级
coutWays(n-2); //走两级
}else{
return;
}
}
int main(){
coutWays(6);
cout<<count<<endl;
system("pause");
}
小球的距离
小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数)
给定四个整数A,B,C,D,请返回所求结果。
测试样例:
100,90,80,70
返回:1020
#include <iostream>
using namespace std;
int calcDistance(int A,int B,int C,int D){
double a=A,b=B,c=C,d=D;
double sum=0;
sum=a+b+c+d;
while(a>0.01||b>0.01||c>0.01||d>0.01){
a=a/2;
b=b/2;
c=c/2;
d=d/2;
sum=sum+2*(a+b+c+d);
}
int intsum=sum;
if(sum-intsum>0.5)
return intsum+1;
else
return sum;
}
int main(){
int r=calcDistance(100,90,80,70);
cout<<r<<endl;
system("pause");
}