A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Smilexs

中级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© Smilexs 中级黑马   /  2015-10-1 16:09  /  1276 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Smilexs 于 2015-10-1 16:08 编辑

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

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


回帖看源码:
游客,如果您要查看本帖隐藏内容请回复

游客,如果您要查看本帖隐藏内容请回复





评分

参与人数 1黑马币 +2 收起 理由
洋葱头头 + 2 很给力!

查看全部评分

13 个回复

倒序浏览
苏杭 来自手机 中级黑马 2015-10-1 20:59:04
沙发
看上去挺难的啊
回复 使用道具 举报
哈哈,不错。好像解决数学问题。
看看我的对不对:

  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. }
复制代码
回复 使用道具 举报
{:2_30:}........................................................
回复 使用道具 举报
感觉好难
回复 使用道具 举报
谢谢  谢谢了
回复 使用道具 举报
确实有点难啊
回复 使用道具 举报
谢谢楼主
回复 使用道具 举报
对于我这个只看了5天代码的人来说,太难了
回复 使用道具 举报
Iven 初级黑马 2016-2-26 10:55:49
10#
楼主,这个是什么的面试题?安卓黑马就业班的吗?
回复 使用道具 举报
逻辑问题,谢谢楼主
回复 使用道具 举报
很有意思的题,想看看代码
回复 使用道具 举报
支持一下下
回复 使用道具 举报
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+"灯是亮的");
        }
}

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马