亮灯

来源:互联网 发布:先导爱知出现集数 编辑:程序博客网 时间:2024/06/11 16:43

一百个灯泡排成一排,第一轮将所有灯泡打开;第二轮每隔一个灯泡关掉一个,即排在偶数的灯泡都被关掉。第三轮每隔两个灯泡,将开着的灯泡关掉,关掉的灯泡打开。以此类推,第100轮的时候,还有几盏灯泡亮着?你知道答案吗?
别人的算法:

1.算法
1. 全亮
2. 2,4,6,8,10, ...反应 1,2定型 1亮
3. 3,6,9,12,15,18...反应 1,2,3定型 1亮
4. 4,8,12,16,20 ... 反应1,2,3,4定型1,4亮
5. 5,10,15,20 ..反应,1,2,3,4,5定型 1,4亮
6. 6,12,18.. 反应 1-6定型 1,4亮
7. 7,14,21,28 ... 1-7定型, 1,4亮
8. 8,16,24, 1-8定 1,4亮
9, 9,18,27, 1-9定 1,4,9亮
...
算到这有猜想,,平方数位灯亮,懒的研证了
1-10 ^2 = 1,4,9,16,25,36,49,64,81,100 共10灯亮...

 

2.
10盏灯泡亮着,这10盏灯泡排位数都是平方数。

根据提示已经可以看出,这个问题的实质就是找出有多少个灯泡的排位数拥有奇数个因子。每拥有一个因子,到这个因子数的那一轮时,这个灯泡就会被转换开关状态。

比如第1轮,因为所有100个数字都有因数1,所以全部被打开;第2轮,只有那些拥有2这个因子、能被2整除的数字的灯泡转换状态被关掉;第3轮,只有那些拥有3这个因子、能被3整除的数字的灯泡被转换状态。以此类推,如果灯泡排位数拥有奇数个因子,意味着它被打开和关上奇数次,那它就最终还是被打开的状态,如果灯泡排位数拥有偶数个因子,那它最终就是被关上的状态。

比如第1个灯泡有奇数个因子,第2个有偶数个(1,2),第3个有偶数个(1,3)第4个有奇数个(1,2,4),所以 第4个灯泡最后还是亮着的。

最终计算得出,所有排位数为平方数的灯泡最终还是亮着的,因为这些数都拥有奇数个因子,1,4,9,16……

在100以内,共有10个平方数,分别是1,4,9,16,25,36,49,64,81,100。这10个排位数的灯泡,最终都还是亮着。

我竟然算的是49。。。。

参照牛人:

(明天再想,真晚)

#include <stdio.h>
#define N 100
void main ()
{
int i,j,s=0,a[N];
for (i=0;i<N;i++)
 a[i]=1;
for(i=1;i<=N;i++)
 for(j=0;j<N;j=j+i)
  a[j]=0-a[j];
for(i=0;i<N;i++)
{
 if(a[i]==-1)
 {printf ("%d\t",i+1);
 s++;}
}
printf ("%d\n",s);

}

程序改完啦~~!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#include <stdio.h>
#define N 100
void main ()
{
int i,j,s=0,a[N+1];
for (i=0;i<=N;i++)
 a[i]=1;
for(i=1;i<=N;i++)

 for(j=0;j<=N;j=j+i)
  a[j]=0-a[j];
for(i=0;i<=N;i++)
{
 if(a[i]==-1)
 {
  printf ("%d\t",i);
 s++;
 }
}
printf ("%d\n",s);
}


0 0
原创粉丝点击