2018-06-17 11:54:51

开关电灯问题是一个比较经典的趣味数学题,本文中主要介绍其中的一些常见情况。

一、Bulb Switch

问题描述:

问题求解:

初始状态:off, off, off,... ,off.

Step 1:on, on, on, ... ,on

Step 2:on, off, on, ...

对于第 i 盏灯,其在Step k 被switch前提是i % k == 0。因此,对于第 i 盏灯其在最后保持on的前提是其因子个数为奇数个,换言之,i 只有是完全平方数才能满足条件。所以本题就转换成了求完全平方数个数的问题。

public class BulbSwitch {
public int bulbSwitch(int n) {
return (int) Math.sqrt(n);
}
}

二、Bulb Switcher II

问题描述:

问题求解:

首先研究一下其中的操作,可以发现1 + 3 - > 2,1 + 2 - > 3, 2 + 3 - > 1。因此实际上至多只会产生如下8种可能:

All_on, 1, 2, 3, 4, 1+4, 2+4, 3+4

用二进制表示就是000~111的八种表示。

要得到这八种结果需要至少三次操作,因此m >= 3,另外当n < 3 的时候显然是无法得到8中结果的,因此对于m < 3 && n < 3 的情况做一下讨论即可。

class Solution {
public int flipLights(int n, int m) {
if(m==0) return 1;
if(n==1) return 2;
if(n==2&&m==1) return 3;
if(n==2) return 4;
if(m==1) return 4;
if(m==2) return 7;
if(m>=3) return 8;
return 8;
}
}

开关灯问题 BulbSwitch的更多相关文章

  1. Code[VS]1690 开关灯 题解

    Code[VS]1690 开关灯 题解     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description:     YYX家门前 ...

  2. ckplayer播放器去掉右边的开关灯分享插件

    在上一篇文章中介绍了如何使用ckplayer播放器,但是有的人不需要CK播放器右边的开关灯分享插件,那么就需要把该插件给去掉,方法也很简单. 第一步:先打开ckplayer.js里找到下面三行删除掉 ...

  3. 【codevs1690】开关灯 线段树 区间修改+区间求和(标记)

    [codevs1690]开关灯 2014年2月15日4930 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的 ...

  4. 【wikioi】1690 开关灯(线段树)

    http://wikioi.com/problem/1690/ 这题可不能算是水题了.. 在线段树中,我只想到了lazy改变,但是没想到lazy变后size怎么变,我的策略变成了lazy为0时size ...

  5. Codevs 1690 开关灯 USACO

    1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description YYX家门前的街上有N(2<=N& ...

  6. Codevs_1690_开关灯_(线段树)

    描述 http://codevs.cn/problem/1690/ 一排共 n 个灯,起初都是关着的,现在有 m 次操作. 0 开头的操作代表将 l ~ r 的开关按一遍,1 开头的操作代表询问 l ...

  7. BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )

    线段树.. --------------------------------------------------------------------------------- #include< ...

  8. 1230: [Usaco2008 Nov]lites 开关灯

    1230: [Usaco2008 Nov]lites 开关灯 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1162  Solved: 589[Sub ...

  9. 线段树——codevs 1690 开关灯

    先来一发题目: 1690 开关灯 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点 ...

随机推荐

  1. swoole udp

    server.php <?php $server = new swoole_server('127.0.0.1', 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); ...

  2. Perl的debug小技巧

    进入Perl的调试环境的命令:  Perl  -d  perl_file 设置断点:b + perl代码中的行号. 执行到断点:c 表示continue until breakpoint. 执行下一条 ...

  3. Python: 序列: 过滤序列元素

    问题: 你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 answer: eg1:列表推导 最简单的过滤序列元素的方法就是使用列表推导.比如:>>> mylist = ...

  4. WSDL解析

    背景 前面我们介绍过利用javassist动态生成webservice,这种方式可以使得我们系统通过页面配置动态发布webservice服务,做到0代码开发发布北向接口.进一步思考,我们如何0代码开发 ...

  5. Linux服务器---配置apache支持php

    apache支持php php是最好用的服务器语言了,Apache对php有很强大的支持 1.检测是否安装php,如果什么信息也没有,那么你就要自己安装php了 [root@localhost ~]# ...

  6. Linux中Postfix邮件安装Maildrop(八)

    Postfix使用maildrop投递邮件 Maildrop是本地邮件投递代理(MDA), 支持过滤(/etc/maildroprc).投递和磁盘限额(Quota)功能. Maildrop是一个使用C ...

  7. div居中布局

    利用margin属性可以实现div居中布局,把div的左边距和右边距设置为auto即可,代码如下 <!DOCTYPE html> <html> <head> < ...

  8. mongodb 最佳可视化工具mongobooster

    最好用的mongodb GUI工具 mongobooster,没有之一,可从https://mongobooster.com/下载 常见管理命令可参考,http://www.cnblogs.com/l ...

  9. ELK之elasticsearch6.5

    官方网站:https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html 这里采用rpm的方式安装: # wget h ...

  10. PHP安装包TS和NTS的区别

    原文链接:http://blog.csdn.net/zhuifengshenku/article/details/38796555 TS指Thread Safety,即线程安全,一般在IIS以ISAP ...