几道常见的逻辑面试题

几道常见的逻辑面试题目,网上也搜索到答案了,都是比较简单的题目,昨天面试遇到了,整理了下把答案分享出来。

1,10!递归实现

// 计算10!的阶乘

static int returnResult(int n) {

if (n <= 1) {

return 1;

}

return n * returnResult(n – 1);

}

System.out.println(“10!:” + returnResult(10));

2,猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子? 四种方法

// 计算猴子第一次摘了多少1

static int monkey1() {

int day = 9; // 总共多少天

int currTotal = 1; // 当前剩下

int oddTotal = 0; // 计算上一次剩余

for (; day > 0; day–) {

oddTotal = (currTotal + 1) * 2;

currTotal = oddTotal;

}

return oddTotal;

}

// 计算猴子第一次摘了多少2

static int monkey2() {

int day = 9; // 总共多少天

int currTotal = 1; // 当前剩下

int oddTotal = 0; // 计算上一次剩余

while (day— > 0) {

oddTotal = (currTotal + 1) * 2;

currTotal = oddTotal;

}

return oddTotal;

}

// 计算猴子第一次摘了多少3

static int monkey3() {

int day = 9; // 总共多少天

int currTotal = 1; // 当前剩下

int oddTotal = 0; // 计算上一次剩余

do {

oddTotal = (currTotal + 1) * 2;

currTotal = oddTotal;

} while (–day > 0);

return oddTotal;

}

// 计算猴子第一次摘了多少4

static int monkey4(int n ){

int num = 0;

if( n == 10 ){

return 1;

}else{

num =  monkey4( n + 1 ) * 2 + 2;

}

return num;

}

System.out.println(“猴子共摘了多少:” + monkey1());

System.out.println(“猴子共摘了多少:” + monkey2());

System.out.println(“猴子共摘了多少:” + monkey3());

System.out.println(“猴子共摘了多少:” + monkey4( 1 ) );

3,一球从100米高度自由落下,每次落地后返跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

// 计算总经过路线长度 和第10次的弹跳的高度 1

static void countSum1() {

double s = 0;

double h = 100;

for (int i = 1; i <= 10; i++) {

h = h / 2;

s = s + h * 2;

}

System.out.println(“总的弹跳高度:” + s + “,第10次弹跳高度:” + h);

}

// 计算总经过路线长度 和第10次的弹跳的高度 2

static void countSum2() {

  int n = 1;  // 次数计数器

  double h = 100;  // 总高度

  double s = 0;  // 共经过的路程

  while(n <= 10)

  {

      s += h;

      h /= 2;

      n ++;

  }

  System.out.println(“总的弹跳高度:” + s + “,第10次弹跳高度:” + h);

}

countSum1();

countSum2();