百度百灯问题

题目:

有100盏灯泡,第一轮点亮所有电灯,第二轮每两盏灯熄灭一盏,即熄灭第2盏,第4盏,以此类推,
第三轮改变编号为3的倍数的电灯,第3盏,第6盏,如果原来那盏灯是亮的,就熄灭它,如果原来是灭的,
就点亮它,以此类推,直到第100轮。问第100结束后,还有多少盏灯泡是亮的?

 

思路:

灯的编号越大,被操作的次数就会越多。例如:第5次操作的时候,前4盏灯就不会再被操作了,第5盏及后面的灯才有可能被操作。

对于每盏灯,操作的次数是奇数次,灯就是亮的;操作的次数是偶数次,等就是灭的。

每盏灯被操作的次数等于等所在位置编号的约数的个数。(约数的个数要想是奇数,只能是完全平方数。)

若 a>=b ,a%b == 0 。则b是a的约数。

 

代码:

for i in range(1,101):     # i 为灯的位置数
    k=0                    #记录第i盏灯被操作的次数
    for j in range(1,i+1): # j 为操作的次数
        if i%j==0:         #当操作的次数,是灯位置数的约数时,灯才会被操作
            k+=1           #记录灯被操作的次数
    if k%2==1:             #被操作次数为奇数的灯是亮的
        print(i)

输出结果:

1
4
9
16
25
36
49
64
81
100

 

总结:

1.对于每盏灯,拉动的次数是奇数时,灯就是亮着的,拉动的次数是偶数时,灯就是关着的。

2.每盏灯拉动的次数与它的编号所含约数的个数有关,它的编号有几个约数,这盏灯就被拉动几次。

3.1——100这100个数中有哪几个数,约数的个数是奇数。我们知道一个数的约数都是成对出现的,

只有完全平方数约数的个数才是奇数个。

所以这100盏灯中有10盏灯是亮着的。

它们的编号分别是: 1、4、9、16、25、36、49、64、81、100。

 

posted @ 2018-07-28 23:46  doitjust  阅读(220)  评论(0编辑  收藏  举报