| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1579 人关注过本帖
标题:求助!如何用数组实现一个高难度的问题!详细请进贴
只看楼主 加入收藏
lixiangmail
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-7-29
收藏
 问题点数:0 回复次数:11 
求助!如何用数组实现一个高难度的问题!详细请进贴
共有100盏灯与100个人,所有的灯初始都是关闭状态
第一个人把所有的灯全部打开
第二个人把所有2的倍数包括2的灯全部关闭
第三个人把所有3的倍数包括3的灯又全部打开
第四个人把所有4的倍数包括4的灯全部关闭
第五个人把所有5的倍数包括5的灯又全部打开

依次类推!!判断最后还有多少盏灯还亮着,请问高手如何用数组实现!!!!!!!!!

[[it] 本帖最后由 lixiangmail 于 2008-7-30 21:48 编辑 [/it]]
搜索更多相关主题的帖子: 高难度 倍数 状态 
2008-07-30 21:26
elan1986
Rank: 6Rank: 6
等 级:贵宾
威 望:18
帖 子:458
专家分:407
注 册:2007-12-17
收藏
得分:0 
public class test
{
    public static void main(String[] args )
    {
        int[] a=new int[101];
        int b=1,i=1,j=1;  
        for(j=1;j<101;j++)
        for(i=1;i<101;i++)
        {
            if(i%2==1)//奇数
            {    
                if(i%j==0)
                a[i]=1; //0 表示关灯 1 表示开灯
                b=b+1;
            }
            else
            {
                if(i%j==1)
                a[i]=0;
                b=b-1;
            }
        }
        System.out.print(b);
    }
}
计算结果只有1
不知道对不对!
2008-07-30 23:33
elan1986
Rank: 6Rank: 6
等 级:贵宾
威 望:18
帖 子:458
专家分:407
注 册:2007-12-17
收藏
得分:0 
main()
{
    int sum=0,b,i;
    for(i=1;i<101;i++)
    {
        if(i%2==1)
            sum=sum+100/i;
        else
            sum=sum-100/i;
    }

    printf("%d",sum);
}
这个程序是用C写的
主要用来验证
PS:机房没有JAVA 安装的时候有点问题
所以用。。。。。
2008-07-31 09:34
elan1986
Rank: 6Rank: 6
等 级:贵宾
威 望:18
帖 子:458
专家分:407
注 册:2007-12-17
收藏
得分:0 
main()
{
    int a[101],i,j,b;
    for(j=1;j<101;j++)
    for(i=1;i<101;i++)
    {
        if(j%2==1)
            {    if(i%j==0) a[i]=1;    }
        if(j%2==0)
            {    if(i%j==0) a[i]=0;     }
    }
    for(i=1;i<101;i++)
    printf("%5d",a[i]);
}
我分析的 最终结果!!
50开
50关
2008-07-31 14:35
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
开的比关的多,应该不会是50的.我得68
public class Example
{
    public static void main(String[] args)
    {
        int count = 0;
        for (int i = 1; i <= 100; i++)//人
            for (int j = 1; j <= 100; j++)//灯
                if(j%i == 0)
                    if (i % 2 == 0)
                         count--;
                    else
                        count++;
        System.out.print(count);
    }
}
2008-07-31 20:04
lixiangmail
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-7-29
收藏
得分:0 
public class MyProject {
/*
* 共有100盏灯与100个人,所有的灯初始都是关闭状态
第一个人把所有的灯全部打开
第二个人把所有2的倍数包括2的灯全部关闭
第三个人把所有3的倍数包括3的灯又全部打开
第四个人把所有4的倍数包括4的灯全部关闭
第五个人把所有5的倍数包括5的灯又全部打开
依次类推!!判断最后还有多少盏灯还亮着
* */

public static void main(String[] args) throws IOException {
boolean light[] = new boolean [101] ;//以false表示等关闭,下标为0的不用,下标从1到100的表示灯

int j ;
for (int i=1;i<101;i++){
for(j=1;j<101;j++){
if(j%i == 0)
light[j] = !light[j];
}
}
for(j=1;j<101;j++){
if (light[j]){
System.out.println("第"+j+"盏是亮的");
}
}
}
}


/** 已经解决了,谢谢大家!
*/
2008-07-31 20:53
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 

我忽略了一个严重的问题.
灯要开着才能去关的
反之,灯要关着才能去开的...

LZ你的还有点问题.应该是50.
还是4楼的利害...


问题出在这里
if(j%i == 0)
light[j] = !light[j];
关的变开,开的变关.
如果,那个人是去关的,反而把其它的给开了.
呵呵~~~

public class Example
{
    public static void main(String[] args)
    {
        int count = 0;
        boolean light[] = new boolean[100];
        
        for(int i = 0; i < 100; i++)
            light[i] = false;
        
        for (int i = 0; i < 100; i++)
            for (int j = 0; j < 100; j++)
                if((j+1)%(i+1) == 0)
                    if ((i+1) % 2 == 0)
                    {
                        if(light[j])
                        {
                            light[j] = false;
                            count--;
                        }                             
                    }
                    else
                    {
                        if(!light[j])
                        {
                            light[j] = true;
                            count++;
                        }                        
                    }
        System.out.print(count);
    }
}
2008-08-01 01:22
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 

真是高难度...
PS:其实自己太粗心...
2008-08-01 01:25
elan1986
Rank: 6Rank: 6
等 级:贵宾
威 望:18
帖 子:458
专家分:407
注 册:2007-12-17
收藏
得分:0 
其实这道题
不用编程也可以分析出来的(这道题感觉编程意义不大)
因为你好好的分析题意,就会知道
每次开关灯问题,其实可以看做是
第N个人“只开”第N盏灯
仔细想想就知道了!
2008-08-01 10:42
Arui
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2006-10-15
收藏
得分:0 
同意楼上的看法,不过有一点需要补充。根据以上所说,灯只有开着才能关,言下之意就是说如果灯是关着就不用关了,于此同理,灯只有关着才能开,如果是开着就不用开了。按照序号把人和灯作以映射,就变成奇数号的人负责开和自己号数相等的灯,而偶数号的人负责关和自己号数相等的灯。举个例子,比如序号为4的灯,之前应该被1号人开了,被2号人关了,到了4应该是关了;再比如96号灯,我们不知道之前都被那些号数的人开和关(其实去分解96还是可以知道的),但到96号人时,灯只用两种状态,开或者关,96因为是96的倍数,按照题意应该是关,如果之前是关,则不关,如果之前是开,则关,但不管怎样,巾帼96号人之后,灯是出于关闭状态的。综上分析,可以得出,奇数号的人开和自己号数相等的灯,偶数号的人关和自己号数相等的灯,这样,最后就只剩下50盞灯开着,而且都是奇数号的灯。

在家靠兄弟,出门靠朋友 Email:wangruiwangrui8@
2008-08-01 12:03
快速回复:求助!如何用数组实现一个高难度的问题!详细请进贴
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031117 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved