一道面试题的解决办法
来源:互联网 发布:mac版chrome翻墙插件 编辑:程序博客网 时间:2024/06/05 21:57
题目:有100盏灯,从1~100编上号,开始时所有的灯都是关着的,第一次,把所有编号是1的倍数的灯的开关状态改变一次;第二次,把所有编号是2的倍数的灯的开关状态改变一次;第三次,把所有编号是3的倍数的灯的开关状态改变一次;以此类推,直到把所有编号是100得倍数的灯的开关状态改变一次.问,此时所有开着的灯的编号.
分析:一拿到题目就很直白的想到用程序按照题目的意思定义一个大小为100的数组,按照每次的做法来改变存储的值,姑且0为关,1为开。其实仔细一想完全没有必要,题目的意思就是考虑100以内的自然数的因数的个数为基数还是偶数。举个例子:6有1,2,3,6工4个因数,所以最后编号为6的灯为关闭。也就是说我们只需要找到因数为奇数的编号就行了。
for (int j = 1; j < 101; j++) { CountByIndex ci = new CountByIndex(); int count = ci.getIndex(j); if(count%2!=0) { Console.WriteLine(j + ":" + "Turn Off"); }else { Console.WriteLine(j + ":" + "Turn On"); } }
public int getIndex(int index) { int all = 0; for (int i = 2; i <= index; i++) { if (index % i == 0) { all++; } } return all; }最后运行程序结果为:1,4,25,36,49,64,81,100各位知道原因了吗?亮的是1、4、9、16、25、36、49、64、81、100这10盏编号是完全平方数的灯,因为它们的开关被拉的次数是奇数次.为什么完全平方数的约数个数是奇数呢?有一个算约数个数的方法:
设某数为A,将A分解质因数是A=a1^n1*a2^n2*a3^n3……an^nn
则它的约数个数是(n1+1)*(n2+1)*(n3+1)……(nn+1)
若它是完全平方数,则n1、n2、n3……nn必须是偶数,那么(n1+1)、
(n2+1)、(n3+1)……(nn+1)都是奇数,若干个奇数相乘仍得奇数.
0 0
- 一道面试题的解决办法
- 中兴的一道面试题
- 一道面试题的思考
- 微软的一道面试题
- 一道NEC的面试题
- 一道面试题的分析
- 一道数字的面试题
- 一道错误的面试题
- 一道公司的面试题
- google的一道面试题
- google的一道面试题
- 一道有趣的面试题
- 外企的一道面试题
- 一道C的面试题
- 腾讯的一道面试题
- 微软的一道面试题
- 一道以前的面试题
- 一道面试题的解析
- Adapter深入理解与优化
- Mahout学习之Mahout简介、安装、配置、入门程序测试
- apply于call详解
- Maven deploy部署失败原因及解决
- 关于大型网站技术演进的思考(十)--网站静态化处理—动静整合方案(2)
- 一道面试题的解决办法
- springMVC笔记
- POJ lake counting(简单的dfs)
- tar.xz文件如何解压
- Android基础笔记(十二)- 使用AIDL来进行跨进程通信
- linx 线程切换的一些感悟
- 数据库作业一 姓名:肖波 学号:2013211527
- LeetCode - Rotate Array
- Google C++ 风格指南 - 中文版