百度笔试题-100盏灯泡的开关问题

问题:

有100盏灯泡,第一轮点亮所有电灯,第二轮每两盏灯熄灭一盏,即熄灭第2盏,第4盏,以此类推,第三轮改变编号为3的倍数的电灯,第3盏,第6盏,如果原来那盏灯是亮的,就熄灭它,如果原来是灭的,就点亮它,以此类推,直到第100轮。问第100结束后,还有多少盏灯泡是亮的?

如果真的是笔试题,那么就不能用计算机来编码做了吧。

我自己是没想明白的,所以只有编码做。即使编码,也错了好多次。再怎么说也把源码贴在这里吧。

 
public class test { 
  public static void main(String[] args) {
	  int light[]=new int[100];
	  int i,j,x,z;
	  for(z=0;z<100;z++){//把灯全部设置为灭
		  light[z]=0;//0代表这个灯熄灭,1代表这个灯亮着。
	  }
	  for(i=1;i<=100;i++){
		  x=1;
		  for(j=(i*x);j<=100;++x,j=(i*x)){//这一句错了好久。
			  if(light[j-1]==0){//如果亮着就把它熄灭,如果熄灭就开亮
				  light[j-1]=1;
			  }else{
				  light[j-1]=0;
			  }
		  }
		  
	  }
	  int LightCount=0;//统计等于0的个数
	  for(i=0;i<100;i++){
		  if(light[i]==1){
			  LightCount++;
		  }
	  }
	 
	  System.out.print("灯亮的个数:"+LightCount);  
  	} 
  } 
不多说了,

请看正解(转载自:http://blog.csdn.net/realxie/article/details/8066927):

解答:

由题意最如果最后某一盏灯是亮着的,那么它一定是被切换了奇数次(第0次的时候全部都关着)。

首先来看一下6这盏灯,它被切换的次数是第1次(轮),第2次,第3次和第6次。

可以看出如果某一轮6被切换了,那么该轮数一定可以整数6,即是6的约数,由于约数是成对出现的,所以6被关掉的次数是偶数次。

但是是对于像4,16这样的完全平方数,由于他们都有一个约数k 使得 K的平方等于该完全平方数,所以其被关掉的次数应该为奇数,因为K只能被算一次。


所以该问题的答案是只有1-100的完全平方数,才是亮着的。

即1,4,3,16,25,36,49,64,81,100这10盏灯亮着。


*备注:

完全平方数:一个数如果是另一个整数的完全平方,那么我们就称这个数为完全平方数,也叫做平方数


谢谢这位大哥的答案!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值