那些年我们经历的BT面试题
初入职场面试的我到处碰壁,以下是我个人对几道面试题的小总结:
1.一列数字的规则如下:1,1,2,3,5,8,13,21, 34........ 求第30位数字是多少,用递规和非递归两种方法算法实现。
(1)递归:
1 @Test 2 public void test(){ 3 System.out.println(foo(30)); 4 } 5 private static int foo(int i) { 6 if(i<0){ 7 return 0; 8 }else if(i>0&&i<=2){ 9 return 1; 10 }else{ 11 return foo(i-1)+foo(i-2); 12 } 13 }
(2)非递归:
1 private static long Fibonacci(int n) 2 { 3 long result = 1; //当n<=2时都返回1 4 if (n > 2) //当n>2时,利用循环计算 5 { 6 long first = 1; 7 long second = 1; 8 int i = 0; 9 n = n - 2; //每次当然要减少两次循环 10 while (i < n) 11 { 12 first = second; 13 second = result; 14 result = first + second; 15 i++; 16 } 17 } 18 return result; 19 }
2.求1-100之间的和。
1 int sum = 0; 2 for(int i =1; i <=100; i ++) 3 { 4 sum += i; 5 } 6 System.out.println("1-100之间的和:" + sum);
使用递归实现:
1 private static int add(int param) { 2 if (param < 100 && param > 0) { 3 return param + add(param + 1); 4 } else { 5 return param; 6 } 7 }
3.冒泡排序:1,4,2,3,5,8,6,9
1 public void bubbleSort(){ 2 int a[]={1,4,2,3,5,8,6,9}; 3 int temp=0; 4 for(int i=0;i<a.length;i++){ 5 for(int j=i+1;j<a.length;j++){ 6 if(a[i]>a[j]){ 7 temp=a[i]; 8 a[i]=a[j]; 9 a[j]=temp; 10 } 11 } 12 for(int i=0;i<a.length;i++) { 13 System.out.println(a[i]); 14 } 15 }
逻辑思维题
1.有一个7克的砝码和一个2克的砝码,有一个天平.把140克的盐称三次分成50克和90克.你该如何分?
(1).先用天平将盐分成两份,每份70克
(2).再取其中一份用天平分成两份,每份35克然后其中一个里面放7克的砝码,另一个放2克的砝码,然后从7克砝码的盘里面往外拿盐,拿出5克两个就平衡了.
(3).最后两个盘里1个30克,1个35克,将5克加入35克里面,然后将这40克再用天平平均分成两份,每次份20克,将20克加入第一步剩下的那一份70克里面组成90克,剩下的为50克
这是我几场面试总结下来的,希望能对各位有所帮助,也希望各位大神多多指点!
后续还有我遇见的或者面试考到的经典题型我会继续更新。
你的建议就是我的动力