百度前端面试题1-100扇门找出哪些门开着

作者:日期:2014-02-25 12:03:35 点击:123

有编号1-100的房间,每个房间都有一扇门,刚开始都是关着的。有编号1-100的人,每个人依次路过每个房间,如果房间号能整除他的编号,就把门的状态改变一下(关的的就打开,打开的就关上)。问最后哪些门是开着的。程序代码如下所示:

//面向过程编程的写法

getTrues();
function getTrues(){
 var i=1,
  j=1,
  arr=[]
  flag=false;
  
 for(;i<=100;i++){
  for(j=1;j<=100;j++){
   if(i<j){
    break; 
   }
   if(i%j==0){
    flag=(!flag); 
   }
  }
  if(!!flag){
   arr.push(i);
   flag=false; 
  }
 }
 console.log('zgq==='+arr); 
}

//以下是原作者的面向对象写法,这个写法如果再考虑一下for循环的性能问题就更好了,(此属个人愚见,仅供参考!!)
//开:1,关-1

var doors = [];
function Door(idx) {
    this.state = -1;
    this.idx = idx;
}

for (var i = 0; i < 100; i++) {
    doors.push(new Door(i + 1));
}

for (var i = 1; i <= 100; i++) {
    for (var j = 0; j < 100; j++) {
        if (doors[j].idx % i == 0) {
            doors[j].state *= -1;
        }
    }
}

var result = [];
for (var i = 0; i < 100; i++) {
    if (doors[i].state == 1) {
        result.push(doors[i].idx);
    }
}

console.log(result);

上一篇: javasrcipt数组交差并补面试题

下一篇: javascript在String中写一个方法trim,要求能够去除一个字符串开始和结尾的空格