栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode 319. 灯泡开关--找规律

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 319. 灯泡开关--找规律

  1. 灯泡开关

初始时有 n 个灯泡处于关闭状态。

对某个灯泡切换开关意味着:如果灯泡状态为关闭,那该灯泡就会被开启;而灯泡状态为开启,那该灯泡就会被关闭。

第 1 轮,每个灯泡切换一次开关。即,打开所有的灯泡。

第 2 轮,每两个灯泡切换一次开关。 即,每两个灯泡关闭一个。

第 3 轮,每三个灯泡切换一次开关。

第 i 轮,每 i 个灯泡切换一次开关。 而第 n 轮,你只切换最后一个灯泡的开关。

找出 n 轮后有多少个亮着的灯泡。

示例 1:

输入:n = 3
输出:1
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭].

你应该返回 1,因为只有一个灯泡还亮着。

示例 2:

输入:n = 0
输出:0

示例 3:

输入:n = 1
输出:1

提示:

0 <= n <= 109
题解

首先自己运行这面这段代码查看规律。

#include
using namespace std;
int main()
{
	int sum=0;
	for(int i=1;i<=100;i++)
	{
		int ans=0;
		for(int j=1;j<=i;j++)
		{
			if(i%j==0)ans++;
		}
		sum+=(ans%2);
		cout< 

发现规律,就可以写代码了。

class Solution {
public:
    typedef long long ll;
    ll sum[100000],a[100000];
    int bulbSwitch(int n) 
    {
        if(n==0)return 0;
        sum[1]=3;
        a[1]=3;
        for(int i=2;i<100000;i++)
        {
            a[i]=a[i-1]+2;
            sum[i]=sum[i-1]+a[i];
        }
        int l=1,r=100000,fin=0;
        while(l<=r)
        {
            int mid=(l+r)/2;
            if(sum[mid] 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303995.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号