逻辑分析题汇总(一)

1.有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
 程序分析: 兔子的规律为数列: 1 1,2,3,5,8,13,21,34,表示了一种动植物数量的正常增长的数量变化

                                  月份: 1  2 3 4 5 6  7  8 9 10

第一种方法:使用递归——但这种方法递归调用的效率非常低。

1 function dd(n){
2         if (n < 3) {return 1;}
3         if(n >= 3){//这里注意n还有等于3的情况,不然会导致递归中断
4             return (dd(n-1)+dd(n-2));
5         }
6     }
7    console.log(dd(10));

第二种方法:使用循环

 1          // f(n-2)+f(n-1) = f(n)
 2          //   1      1       2   n=3
 3          //   1      2       3   n=4
 4          //   2      3       5   n=5
 5          //   3      5       8   n=6
 6 
 7     function dd(n){
 8         var a =1,b=1,c=1;
 9         for(var i =3;i <= n;i++){
10             a =b;
11             b =c;
12             c= a+b;
13         }
14         return c;
15     }
16    console.log(dd(6));

这种方式更加巧妙。

2.将一个正整数分解质因数。例如:输入 90, 打印出 90=2*3*3*5 。

 1  function fenjie(n){
 2          var arr=[];
 3          for(var i =2;i < n/2;i++){
 4              while(n % i == 0){while循环在指定条件为true时,就一直执行;不满足的话,就跳出循环
 5                  arr.push(i);
 6                  n/=i;//此处不断的循环
 7              }
 8          }
 9          return arr.join('*');
10      }
11      console.log('90 = ' + fenjie(90));

3.要求输出国际象棋棋盘。

在这里使用嵌套循环。

1   
  //外层循环控制行
for(var i = 0,str ='';i<8;i++){ 2 //内层循环控制列 3 for(var j = 0;j< 8;j++){ 4 //拼接一个正方形:如果r+c为偶数;就拼接空心方块,否则拼接实心方; 5 str += (i+j)%2 ==0?'□':'■'; 6 } 7 str+='\n'; 8 } 9 console.log(str);

实现效果:

在这里我们比较了几种情况,需要分析下:

输出情况:会输出每一次循环的值:

修改代码后:

输出:

修改代码:

输出:

修改代码:

输出:

 

posted on 2017-03-21 10:48  baoyadong  阅读(282)  评论(0编辑  收藏  举报

导航