今天闲来无事,刷到一个挺有意思的题目,说是开关的游戏,我就琢磨着自己动手试试看。
一开始还真没搞明白啥意思,仔细看看,,原来是这么回事:
- 假设有一排灯泡,一开始都是关着的。
- 然后,咱们来回拨动开关,第一次把所有灯泡都打开,第二次每隔一个灯泡拨动一次开关,第三次每隔两个...以此类推。
- 问你,拨动一定次数后,哪些灯泡是亮着的。
小编温馨提醒:本站只提供游戏介绍,下载游戏推荐89游戏,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
动手试试
光看文字描述还是有点懵,我决定先手动模拟几次,找找感觉。拿张纸,画几个圈圈代表灯泡,开始比划:
- 第一轮: 全部打开,简单,所有灯泡都亮。
- 第二轮: 每隔一个拨一下,也就是第2、4、6...个灯泡被拨动,状态反转,这些灯泡就关上。
- 第三轮: 每隔两个拨一下,也就是第3、6、9...个灯泡被拨动,原来关着的又打开,原来开着的又关上。
这么搞几轮,我发现有点规律!好像那些编号是完全平方数的灯泡,会是亮着的。比如1(1x1),4(2x2),9(3x3)等等。
为啥是完全平方数?
我开始琢磨这背后的道理。你想,一个灯泡被拨动几次,取决于它的编号有多少个因数。比如6号灯泡,有1、2、3、6四个因数,所以它会被拨动4次。
关键来!大部分数字的因数都是成对出现的,比如6的因数,1和6,2和3。成对出现的因数意味着什么?意味着灯泡被拨动偶数次,那肯定是关着的。
只有完全平方数,它的因数里有一个是“落单”的,比如9的因数,1和9,3和...咦,没有和3配对的,因为3x3=9嘛这样一来,完全平方数的因数个数就是奇数个,灯泡被拨动奇数次,就是亮着的!
用代码实现
找到规律后,我感觉用代码实现就简单多。我直接用一个数组来表示灯泡的状态,0表示关,1表示开。然后按照题目说的,循环拨动开关就行。
我只需要检查一下,哪些灯泡的状态是1,它们的编号就是我们要找的答案。
今天这番折腾,感觉还挺有收获的,把一个看似复杂的问题,一步步拆解,找到规律,用代码解决。以后遇到类似的问题,我也更有信心!