有编号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);