逻辑分析题(三)

1. 有 1 、 2 、 3 、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

这一题的话,我之前算法有错误,而不自知,所以需要反省下。

 1 var count =0;
 2      for(var i = 1;i< 5;i++){
 3          for(var j =1;j < 5;j++){
 4              for(var k =1;j< 5;j++){
 5                  if(i!=j&&i!=k&&j!=k)
 6                      console.log(''+ i+j+k);
 7                     count++;
 8              }
 9          }
10          console.log(count);

优化,可以减少循环的次数:

2.输入三个整数 x,y,z ,请把这三个数由小到大输出。

 

 1  function sort(x,y,z){
 2         if(x > y){x^=y;y^=x;x^=y;}
 3            //如果x>y,就交换x和y的值;
 4         if(y > z){y^=z;z^=y;y^=z;}
 5            //如果y>z,就交换y和z的值;
 6         if(x > y){x^=y;y^=x;x^=y;}
 7            //如果x>y,就交换x和y的值;
 8         console.log(x,y,z);
 9        }
10      sort(2,5,4);
11      sort(13,11,9)

这里用到了JS中的位操作符,还是比较犀利的。

3.互换a,b的值

     1、加减法:该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失

a = a + b;

b = a - b;

a = a - b;

    2、异或法:可以完成对整型变量的交换,对于浮点型变量它无法完成交换。

a = a^b;

b = a^b;

a = a^b;

    3、乘除法:可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题。而且乘除法比加减法要多一条约束:b必不为0。

a = a * b

b = a / b

a = a / b

   4.

var a=3,b=5;
a = [b,b=a][0];

4.输入某年某月某日,判断这一天是这一年的第几天?

 1 function getDays(year,month,date){
 2 var days = 0;//保存总天数;
 3 if(month >11)days+=30;
 4 if(month >10)days+=31;
 5 if(month >9)days+=30;
 6 if(month >8)days+=31;
 7 if(month >7)days+=31;
 8 if(month >6)days+=30;
 9 if(month >5)days+=31;
10 if(month >4)days+=30;
11 if(month >3)days+=31;
12 if(month >2){
13 if(year%4 ==0&&year%100!=0||year%400==0) {//闰年
14 days+=29;
15 } else{
16 days +=28;//平年
17 }
18 }
19 if(month >1)days+=31;
20 return days + date;
21 }
22 console.log(getDays(2000,8,15))

 





posted on 2017-03-21 13:59  baoyadong  阅读(300)  评论(0编辑  收藏  举报

导航