黑马程序员技术交流社区

标题: 面试题分享 [打印本页]

作者: Smilexs    时间: 2015-10-1 16:09
标题: 面试题分享
本帖最后由 Smilexs 于 2015-10-1 16:08 编辑

题:大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。
第一次,将所有的灯点亮。
第二次,将所有2的倍数的开关按一下。
第三次,将所有3的倍数的开关按一下。
以此类推。第N次,将所有N的倍数的开关按一下。

1、第100次按完以后,大厅里还有几盏灯是亮的。
2、如果灯的数量跟要操作的次数是可变的呢?
结果:


回帖看源码:







作者: 苏杭    时间: 2015-10-1 20:59
看上去挺难的啊
作者: ganjx    时间: 2015-10-1 21:08
哈哈,不错。好像解决数学问题。
看看我的对不对:

  1. class TestLight
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //灯的数量
  6.                 final int N = 100;
  7.                 int[]light =new int[N];
  8.                 //赋值,初始为关。1:开,0:关
  9.                 for(int i=0;i<N;i++)
  10.                 {
  11.                         light[i]=0;
  12.                 }
  13.                 int maxTimes = N;//按的次数
  14.                
  15.                 for(int i=0;i<maxTimes;i++)
  16.                 {
  17.                         for(int j=0;j<N;j++)
  18.                         {
  19.                                 if((j+1)%(i+1)==0)//与第N次取余为零就按一下
  20.                                 {
  21.                                         light[j]=(light[j]==1?0:1);//                                       
  22.                                 }
  23.                         }
  24.                 }
  25.                 //打印
  26.                 for(int i=0;i<N;i++)
  27.                 {
  28.                         System.out.println((i+1)+"  :  "+light[i]+"\n");
  29.                 }
  30.                
  31.         }
  32. }
复制代码

作者: mars314    时间: 2015-10-1 21:25
{:2_30:}........................................................
作者: 915816106    时间: 2015-10-1 21:59
感觉好难
作者: happy16    时间: 2016-2-26 01:09
谢谢  谢谢了
作者: hehaiwei    时间: 2016-2-26 07:59
确实有点难啊

作者: 纵观星辰    时间: 2016-2-26 09:32
谢谢楼主
作者: byb442230    时间: 2016-2-26 10:50
对于我这个只看了5天代码的人来说,太难了
作者: Iven    时间: 2016-2-26 10:55
楼主,这个是什么的面试题?安卓黑马就业班的吗?
作者: Lily007    时间: 2016-2-26 16:29
逻辑问题,谢谢楼主
作者: 丹霞似锦    时间: 2016-8-5 00:53
很有意思的题,想看看代码
作者: Huyaal    时间: 2016-8-5 11:18
支持一下下
作者: Huyaal    时间: 2016-8-5 11:22
public class Test {
        static int num=0;
        public static void main(String[] args) {
                //生成灯开关,定义一个boolean类型的数组,长度为灯的个数100,true和false分别代表灯亮和关两种状态
                boolean[] boo = new boolean[100];//默认初始值为false,代表灯全是灭的
                for(int i = 1; i<=100;i++){
                        for(int j = 0; j<100;j++){
                                if((j+1)%i==0){
                                        boo[j]=!boo[j];//代表按下开关操作,切换灯的状态
                                }
                        }
                }
                for(int i= 0;i<boo.length;i++){
                        if(boo[i]) {
                                System.out.println("第"+(i+1)+"盏灯的状态是:开");
                                num++;
                        }
                        else System.out.println("第"+(i+1)+"盏灯的状态是:关");
                }
                System.out.println("第100次按完后大厅里还有"+num+"灯是亮的");
        }
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2