Bulb Switcher问题及解法

来源:互联网 发布:linux查看文件前100行 编辑:程序博客网 时间:2024/05/18 19:22

问题描述:

There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every second bulb. On the third round, you toggle every third bulb (turning on if it's off or turning off if it's on). For the ith round, you toggle every i bulb. For the nth round, you only toggle the last bulb. Find how many bulbs are on after nrounds.

示例:

Given n = 3. 
At first, the three bulbs are [off, off, off].After first round, the three bulbs are [on, on, on].After second round, the three bulbs are [on, off, on].After third round, the three bulbs are [on, off, off].
So you should return 1, because there is only one bulb is on.

问题分析:

凡是最终能亮着的灯泡,都是其序号的因子个数为奇数的。我们通过找规律,发现,具有奇数个因子的数是能够完全开平方的数,如1,4,9,16....,所以我们只需要统计出等于小于n的所有完全平方数即可。


过程详见代码:

class Solution {public:    int bulbSwitch(int n) {        return sqrt(n);    }};


原创粉丝点击