苏飞论坛

标题: 开灯关灯问题。。。 [打印本页]

作者: zk9474    时间: 2013-12-10 14:33
标题: 开灯关灯问题。。。
刚才在光逻辑吧发现者道题 思考了下可以编程实现的嘛,,,大神们快贴出你们的代码给小生我瞧瞧{:soso_e142:}

有100个灯泡,每个都有自己的序号,从1—100,每个都有各自的拉线开关,
  且现在均处于关闭状态;另有100个同学,第一名同学把1的倍数序号的灯泡开
  关拉了一次,然后第二名同学把2的倍数序号的灯泡又拉了一次,之后第三名同
  学把3的倍数序号的灯泡再拉一次……依此类推,直至第100名同学拉完。问:这
  是有哪些个序号的灯泡是亮着的?   

[groupid=74]sufeinet总群[/groupid]
作者: mydebug    时间: 2013-12-10 22:42
本帖最后由 mydebug 于 2015-12-29 11:41 编辑

int[] arr = new int[100];
            for (int i = 1; i <= 100; i++)
            {
                for (int j = 0; j < arr.Length; j++)
                {
                    if ((j + 1) % i == 0)
                    {
                        arr[j] = arr[j] == 1 ? 0 : 1;
                    }
                }
            }
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr == 1)
                {
                    Console.WriteLine("第"+(i+1) + "个灯是亮着的");
                }
            }

作者: zk9474    时间: 2013-12-11 11:36
mydebug 发表于 2013-12-10 22:42
先定义一个数组arr用来放100个灯泡,每个默认值都是“灭”的值

for(int i=1;i

{:soso_e112:}这是我写的
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,j;
int arr[101];
    for(i=0;i<101;i++){  //0为灭 1为亮
  arr=0;
    }
    for(i=1;i<101;i++){
  for(j=1;j<101;j++){
   if(j%i==0){            
    if(arr[j]==0)
     arr[j]=1;
                    else if(arr[j]==1)
                    arr[j]=0;
            }
        }
        
     }
        printf("还有以下灯亮着:");
        for(i=0;i<101;i++){
   if(arr==1)
    printf("%d  ",i);
    }

system("pause");
return 0;
}

作者: mydebug    时间: 2013-12-11 12:38
zk9474 发表于 2013-12-11 11:36
这是我写的
#include
#include

判断原来的状态有点多余

作者: punisher    时间: 2013-12-15 14:21
不考虑格式,简要的代码如下:
[C#] 纯文本查看 复制代码
  
// 100个数,代表100盏灯,默认初始化为0
            int []all = new int[100];
            // 100个人开始拉灯
            for (int i = 1; i <= 100;i++ )
            {
                // 100盏灯进行判断
                for (int j = 1; j <= 100;j++ )
                {
                    // 逻辑判断
                    if ( j%i == 0)
                    {
                        all[j-1]++; // 注意数组是从0开始
                    }
                }
            }
            // 判断最终结果,拉一次数字加1,因为初始状态为关,所以可以认为奇数为开,偶数为关。
            for (int k = 0; k < 100;k++ )
            {
                if ( all[k] % 2 != 0)
                {
                    Console.WriteLine("{0}号灯亮着", k+1);
                }
            }

最终结果如图:

作者: aixuexi    时间: 2014-1-2 16:31
本帖最后由 aixuexi 于 2014-1-2 16:35 编辑

[C#] 纯文本查看 复制代码
 bool[] states = new bool[100];


private void lamps_Load(object sender, EventArgs e)
{
//给100个灯泡状态初值;
for (int i = 0; i < 100; i++)
{
states = false;
}





}


#region 第j个同学进行拉灯
public void Operate(int j)
{
for (int k = 1; k < 101; k++)
{
if (Math.IEEERemainder(k,j)==0) //获得操作权
{
if (states[k - 1] == true) //改变两种状态
{ states[k - 1] = false; }
else if (states[k - 1] == false)
{ states[k - 1] = true; }

}

}


}

#endregion

private void button1_Click(object sender, EventArgs e)
{
for (int j = 1; j < 101; j++) //遍历100个同学操作
{
Operate(j);
}

for (int m = 0; m < 100; m++)
{
if (states[m] == true)
{
textBox1.Text += m + 1 + " ";
}

}
}

作者: C#新人    时间: 2014-2-20 15:27
新人不懂,怎么都写那么多呢?有什么说道吗?这样写成不?
[C#] 纯文本查看 复制代码
int[] ar = new int[100];
            for(int i=1;i<=100;i++)
                for(int j=i;j<=100;j+=i)
                {
                    ar[j-1] = 1 - ar[j-1];
                }

作者: DL、    时间: 2014-3-14 13:47
C#新人 发表于 2014-2-20 15:27
新人不懂,怎么都写那么多呢?有什么说道吗?这样写成不?
[mw_shl_code=csharp,false]int[] ar = new int ...

7楼的不错
作者: DL、    时间: 2014-3-14 13:48
C#新人 发表于 2014-2-20 15:27
新人不懂,怎么都写那么多呢?有什么说道吗?这样写成不?
[mw_shl_code=csharp,false]int[] ar = new int ...

7楼的不错




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4