博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转面试题:跑灯
阅读量:6003 次
发布时间:2019-06-20

本文共 760 字,大约阅读时间需要 2 分钟。

hot3.png

原题 有100盏灯,依次编号1-100,初始都是关着的。第1次遍历,打开全部的灯;第2次遍历,关掉第2盏、第4盏等被2整除的灯;第3次打开被3整除的灯;第i次,对被i整除的灯做如下操作 如果灯开着,就关掉 如果灯关着,就打开 如此交替进行,直到100次遍历完毕,请问,还有多少盏灯亮着。

分析 这个题目比较好玩儿,路子走对了,很简单。想不对,方法就不是那么美。

例如,方向不对的话,就按照题目的意思,一遍又一遍的遍历,直到结束,时间复杂度是O(n^2)的。也能够解决问题,但是复杂了。

那么怎么办呢?上面的遍历的做法,是横向的思路,现在我们纵向思考。 一盏灯,会在那几次被操作。例如编号为100的灯:

第1次能够操作,打开

第2次能够操作,关闭

第4次能够操作,打开

第5次能够操作,关闭

第10次能够操作,打开

第20次能偶操作,关闭

第25次能够操作,打开

第50次能够操作,关闭

第100次能偶操作,打开

最终编号为100的灯是打开的。再来看编号为70这盏灯:

第1次能够操作,打开

第2次能够操作,关闭

第35次能够操作,打开

第70次能够操作,关闭

最终编号为70的灯关闭着。

通过上面两个例子,我们会发现,1,2,4,5等都是能够整除100;1,2,35,70都能够整除70。 所以,编号为n的灯,有多少个因数,就有会被操作多少次。很显然,如果是偶数次,则灯一定是关着的。 那什么情况下,操作会是奇数次呢?一个数,每次分解,都是两个数相乘,只有当这两个数相同的时候,才会是偶数次。 所以,最终会亮着的灯,都能够开平方,得到一个正整数:1,4,9,16,25,36,49,64,81,100.

【分析完毕】

转载于:https://my.oschina.net/dongdong2012/blog/162864

你可能感兴趣的文章
git 命令行使用(基础篇)
查看>>
Vue笔记(五)——Token&生命周期
查看>>
《前端十年心路-我把一切告诉你》的书稿大纲&问题收集
查看>>
CSS居中总结大全
查看>>
Elasticsearch 参考指南(安装X-Pack)
查看>>
[LintCode] 604. Design Compressed String Iterator
查看>>
微信小程序黑客马拉松即将开始,来做最酷的 Mini Program Creators!
查看>>
JavaScript基础---函数
查看>>
前端每日实战:120# 视频演示如何用纯 CSS 创作锡纸撕开的文字效果
查看>>
Laravel实用小功能
查看>>
Linux系统上传下载工具rz/sz
查看>>
matplotlib绑定到PyQt5(有菜单)
查看>>
利用Powershell和ceye.io实现Windows账户密码回传
查看>>
如何清理EBS R12 middle-tier cache
查看>>
Windows 8.1 今年 1 月市场份额超 Vista
查看>>
《设计团队协作权威指南》—第1章1.5节总结
查看>>
【PMP认证考试之个人总结】第 5 章 项目时间管理
查看>>
Chair:支付宝前端团队推出的Node.js Web框架
查看>>
《Total Commander:万能文件管理器》——第3.8节.后续更新
查看>>
BSD vi/vim 命令大全(下)[转]
查看>>