戒律 发表于 2008-11-14 13:12:37

【CACY编程交流赛第001期】

本帖最后由 戒律 于 2008-12-19 17:15 编辑

题目:

有一条走廊,走廊天花板上有100盏灯,每个灯都有一个开关,编号分别为1、2、3、...、99、100,开始时所有的灯处于熄灭状态。现在有100个人,编号分别为1、2、3、...、99、100,依次从走廊经过,当经过某盏灯时,若灯的编号是人的编号的倍数,则人就按一下该灯的开关,问所有人经过之后有多少盏灯是亮着的?

要求:

面向诚毅学院广大编程爱好者征集解题方法,编程语言不限。请参赛者将作品压缩打包(需包括源代码,编译运行截图及一份说明参赛者姓名,专业班级,联系方式,编程环境和解题思路的文档)发送至邮箱:125275701@qq.com

截稿时间:2008.11.20

咨询QQ:125275701

CACY编程交流群:8547232

                                                                                                            ——by:CACY创新实践小组


[ 本帖最后由 戒律 于 2008-11-14 13:43 编辑 ]

charon 发表于 2008-11-14 13:12:38

以下是代码:
public class PeopleAndLight {

    public static void main(String[] args) {
      int[] People = new int;
      boolean[] Way = new boolean;

      for (int i = 0; i < 100; i++) {
            People = i + 1; // 设置人的编号
            Way = false;
      }

      for (int i=0; i<;People.length; i++) {
            int pno = i + 1; // 当前某人的编号
            for (int j=0; j<Way.length; j++) {
                int lno = j + 1; //当前灯的编号
                if (lno % pno == 0)
                  Way = !Way;
            }
      }
      
      int count = 0;
      for (int i=0; i<Way.length; i++) {
            if (Way == true)
                count ++;
      }
      
      System.out.println(count);
    }
}

编程环境:JAVA 1.6IDE:ECLIPSE 3.2 OS:UBUNTU LINUX 8.10

这题很容易,不被迷惑就很容易。

一个人一个人的过去,和一群人按顺序过去的结果是一样的

结果是:10


http://p.qihoo.com/pic/1803533q2317f

[ 本帖最后由 charon 于 2008-11-16 23:02 编辑 ]

AK47 发表于 2008-11-14 14:23:21

。。。我数学分数一直徘徊在30分左右。。。
不用编程,直接列个数学方程式出来算不算。。

hyp 发表于 2008-11-14 15:51:47

提示:不要从算法下手,应该从倍数方面着手
答案是:10

胸毛着火了 发表于 2008-11-16 22:28:18

:m41 想了一下,思维好乱

charon 发表于 2008-11-16 23:04:47

汗,怎么一下子就被采纳了。

上面代码因HTML的关系好像有些被弄没了

public class PeopleAndLight {

        public static void main(String[] args) {
                int[] People = new int;
                boolean[] Way = new boolean;

                for (int i = 0; i < 100; i++) {
                        People = i + 1; // 设置人的编号
                        Way = false;
                }

                for (int i=0; i<People.length; i++) {
                        int pno = i + 1; // 当前某人的编号
                        for (int j=0; j<Way.length; j++) {
                                int lno = j + 1; //当前灯的编号
                                if (lno % pno == 0)
                                        Way = !Way;
                        }
                }
               
                int count = 0;
                for (int i=0; i<Way.length; i++) {
                        if (Way == true)
                                count ++;
                }
               
                System.out.println(count);
        }
}


[ 本帖最后由 charon 于 2008-11-16 23:07 编辑 ]

小明 发表于 2008-11-16 23:09:44

哈哈我用C编出来了,快给我奖励吧

小明 发表于 2008-11-16 23:26:54

突然发现是错的:(

hyp 发表于 2008-11-16 23:53:37

:m38 那答案不是最佳解呀

AK47 发表于 2008-11-19 15:48:47

数学白痴偷偷飘过。。。
页: [1]
查看完整版本: 【CACY编程交流赛第001期】