1, 一个房间有100盏灯(全是关着的),由编号1-100的开关 * (只有两种状态,开或者关)控制,门外有100个学生,学生按次 * 序一次进入房间,第一个进入的学生切换是1的倍数的开关,第二 * 个学生切换是2的倍数的开关,以此类推,问,第100学生进入切 * 换后,还有多少盏灯是亮着的?

/*

  • 1, 一个房间有100盏灯(全是关着的),由编号1-100的开关
  • (只有两种状态,开或者关)控制,门外有100个学生,学生按次
  • 序一次进入房间,第一个进入的学生切换是1的倍数的开关,第二
  • 个学生切换是2的倍数的开关,以此类推,问,第100学生进入切
  • 换后,还有多少盏灯是亮着的?
  • */

public class FaceOne {
private static boolean[] lightStatus=new boolean[100];//默认false
/*
* 朴素计算
* 仅仅逻辑而已
* */
private static int getResult(boolean[] lightStatus){
for(int i=1;i<=100;i++)
for(int j=1;j<=100;j++)
if(j%i==0)
if(!lightStatus[j-1])
lightStatus[j-1]=true;
else
lightStatus[j-1]=false;
int count=0;
for(int i=0;i<100;i++){
if(lightStatus[i])
count++;
}
return count;
}

/*
 * 以切换一次作为标准 +1    则最后就只有奇数的灯会亮着
 * 排除素数   素数的约数只有1和本身 
 * 排除非素数 具有两两对应的  6  15 等这种数
 * 剩余就是平方数  平方数由于约数中存在一对相同的两个
 * 约数可以相乘得到结果,所有最后的约数个数肯定是奇数
 * 所以 只要向下取  学生数的开方数即可
 * */
private static int getResult(){
    return (int)Math.sqrt(100);
}


public static void main(String[] args) {
    System.out.println(getResult());
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容