150盏亮着的电灯,各有一个拉线开关控制,编号为1~150 将编号为1~150倍数的灯,依次拉一下 问:拉完后亮着的灯数为几盏? 哪盏灯被拉的最多?

来源:互联网 发布:全国省市区县数据库 编辑:程序博客网 时间:2024/04/27 23:01

(以前写的东西,现在搬上来,现在变笨了,何解?/(ㄒoㄒ)/~~)
同学在朋友圈分享了一个问题,我试着写了下。
问题:
150盏亮着的电灯,各有一个拉线开关控制,编号为1~150
将编号为1~150倍数的灯,依次拉一下
问:拉完后亮着的灯数为几盏?
哪盏灯被拉的最多?”

第一种:

var lightBox = [];//初始化数组 偶数亮着,奇数熄灭for(var i = 0 ; i <= 150; i++){    lightBox[i] = 1; //都是1的倍数,所以是熄灭的}//开始拉灯for(var i = 2; i <= 150; i++){    for(var j = 2; j <= 150; j++){        if(j%i == 0){            lightBox[j] += 1;        }    }}var openNum = 0;var switchMaxIndex = 1;var switchMaxNum = lightBox[1];for(var i = 1; i <= 150; i++){    if(lightBox[i]%2 == 0){        openNum ++;    }    if(lightBox[i] > switchMaxNum){        switchMaxNum = lightBox[i]; //最大开灯次数        switchMaxIndex = i; //记录最大拉灯数的下标    }}console.log(lightBox);console.log("亮灯数为:",lightBox);console.log("拉的最多次的灯为:" + switchMaxIndex + "号;最大开灯次数为:" + switchMaxNum);//结果://亮灯数为: 138//拉的最多次的灯为:120号;最大开灯次数为:16

第二种
思路:算公约数的个数。

//求一个数的公约数的个数function countApproximate(num){    var count = 0;    for(var i = 1; i <= (num/2); i ++){        if(num%i == 0){ //是因数            count ++;        }    }    return count + 1; //加上它自己}//偶数点亮,奇数熄灭var lightBox = [];for(var i = 1; i <= 150; i++){    lightBox[i] = countApproximate(i); //拉灯次数}//console.log(lightBox);var openLightNum = 0;var openMaxNo = 1;var openMaxNum = lightBox[1];for(var i = 1; i <= 150; i++){    if(lightBox[i]%2 == 0){        openLightNum ++;    }    if(lightBox[i] > openMaxNum){        openMaxNum = lightBox[i];        openMaxNo = i;    }}console.log("点亮的灯的个数为" + openLightNum);console.log(`被开最多次的是${openMaxNo}号盏灯。被拉了${openMaxNum}次`);//结果://点亮的灯的个数为138//被开最多次的是120号盏灯。被拉了16次

0 0
原创粉丝点击