京东2016笔试编程题

来源:互联网 发布:商家给淘宝开消费积分 编辑:程序博客网 时间:2024/05/22 00:01
package jingdong;

import java.util.Scanner;

/*有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。*/
public static int countWays(int n) {
//递归解法 超时;采用动态规划方法求解
  int dp[]=new int [n];         
         dp[0]=0;
         dp[1]=1;
          dp[2]=2;
          if(n>2){
        for(int i=3;i<n;i++){
           dp[i]=(dp[i-1]+dp[i-2])%1000000007;
        }
         }
          return dp[n-1];
 
  /* if(n == 1){
    return 0;
   }else if( n ==2){
    return 1;
   }else if(n == 3){
    return 2;
   }else {
    return (countWays(n-1) + countWays(n-2))% 1000000007;
   }*/
   }
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if(n<= 100){
System.out.println(countWays(n));
}
}



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

public  void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A  = sc.nextInt();
int B  = sc.nextInt();
int C  = sc.nextInt();
int D  = sc.nextInt();
       
System.out.println(calcDistance(A,B,C,D));
}
   public int calcDistance(int A, int B, int C, int D) {
        double len = 0;
len+= getlen(A * 1.0,0);
len+= getlen(B * 1.0,0);
len+= getlen(C * 1.0,0);
len+= getlen(D * 1.0,0);
       return (int)Math.round(len);
       
       //下落高度是x米 ,则有下落后弹起的高度是x/2,再落下去,又走了一个x/2,依此类推,一直下去,
       //也就是总距离为 x+2*x(1/2+1/4+1/8+……),而括号中的数列是一个等比数列,其极限求和的结果就是1。所以 总距离就是3*x。
            //return 3*(A+B+C+D); 
             
   }
  


public  double getlen(double a, double sum) {
if (a<=0) {
        return  sum;
    }
    sum+=a+a/2;
    return getlen(a/2, sum); 
}

0 0