逻辑分析题(三)
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))