2016京东算法工程师

2016/05/21 C和C++基础

上台阶

有一楼梯共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");
}

Search

    Post Directory