100盏灯开关的问题

今天朋友发了一个小学五年级的题目,如下:

这小学五年级的题目也太难了吧0.0

用JS的思路来完成这道题目:

  1.有100盏灯,开始都是关着的

let arr = new Array(100).fill(0);

可以创建一个长度为100,每项为 0 的数组(0表示关着,1表示开着)

 

2.第一个学生按1的倍数灯,第二个学生按2的倍数灯。。。。。也就是说 每个灯只有被按了奇数次(1次 3次 5次。。。。)才是开着的 否则灯就是关着的,所以说一个数 只有当它的约数为奇数个时 最后才是开着的。1-100 之间 任何一个数的约数都有1和它本身 ,所以只要找到约数为奇数的时候 才表明这盏灯是开着的  。假设z号等 z的约数 有1 也有z,假设还有x和y, 所以我们换个说法就是,x=y 且 z是1到100的整数 ,所以只有能开整数平方根的数 最后都是开着的,所以很容易就得出最后开着的灯号是

1,4,9,16,25,36,49,54,81,100

  用js来实现以下

  for(let i=1;i<=100;i++){
    for(let j=1;j<=100;j++){
      if(i%j==0){    // 循环查找灯号 i 在1-100里的约数 %取余 取余为0 就表明 j 是 i 的约数
        if(arr[i-1]==0) {  // 因为这里循环是从1开始的 所以要 -1 判断第 i 位数上的数 是否为0 
          arr[i-1]=1;  // 开
        }else {
          arr[i-1]=0; // 关
        }
      }                
    }
  }

console.log(arr) // 这里已经把约数为奇数个 位置上的 0 变成了 1 1表示开着 所以只要找到 1 就能找到开着的灯


var num = 0
  for(let i=0;i<arr.length;i++){
    if (arr[i]==1){
      console.log('开灯的编号是:' + (i + 1))
      num++;
    }     
  }
 
  console.log('开灯的数量是:' + num)
 

这是最后打印的结果

开灯的编号是:1
开灯的编号是:4
开灯的编号是:9
开灯的编号是:16
开灯的编号是:25
开灯的编号是:36
开灯的编号是:49
 开灯的编号是:64
开灯的编号是:81
开灯的编号是:100
最后开灯的数量是:10

 

posted @ 2020-08-07 16:38  环岛公路  阅读(484)  评论(0编辑  收藏  举报