一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。

每盏电灯由一个拉线开关控制。开始,电灯全部关着。

有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;

接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;

接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;

如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。

n个学生按此规定走完后,长廊里电灯有几盏亮着。

注:电灯数和学生数一致。

解题思路一:要判断还剩几盏灯亮着,需要知道每盏灯是被操作奇数次还是偶数次。

若是偶数次,则该盏灯关闭;若为奇数次,则该盏灯打开

#include <stdio.h>
#define MAX 65535int main(int argc, cahr* argv[])
{int light_counter[MAX] = {0};int light_number = 0;int i = 1;int j = 1;//Get the number of times each light is operatedfor(i = 1; i <= MAX; ++i){for(j = 1; j <= MAX; ++j){if(j % i == 0)light_counter[j - 1] += 1;}}for(i = 0; i < MAX; ++i){if(light_counter[i] % 2 == 1)light_number++;}printf("The number of light on is %d.", light_number);return 1;
}

解题思路二:要知道每盏灯被操作的次数是奇数还是偶数,可以对于一个任意数m,都有一对因子i和j,使得i*j=m,则m编号的灯被i和j操作。若操作奇数次,则肯定会有一个数k,使得k*k=m。所以此题转换为求在1-65535中有多少个k*k

#include <stdio.h>#define MAX 65535int main(int argc, char* argv[])
{int k = 1;while(k * k <= MAX){k++;}k -=1;printf("The number of light on is %d.", k);return 1;
}

很明显第二种解题思路优于第一种解题思路

数据结构与算法之亮灯的盏数相关推荐

  1. 关于灯的盏数的亮灭问题c++

    /*一条长廊里依次装有n盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个 ...

  2. 数据结构与算法--将数组排成最小的数

    将数组排成最小的数 题目:输入一个正整数的数组,将数组中所有数字拼接在一起排列成一个新的数,打印能拼接出来的所有数字中最小的一个, 案例:输入数组{12,4,55},则能打印出最小的数组是:12455 ...

  3. 【数据结构与算法】之深入解析“丑数II”的求解思路与算法示例

    一.题目要求 给你一个整数 n ,请你找出并返回第 n 个丑数. 丑数就是只包含质因数 2.3 和(或) 5 的正整数. 示例 1: 输入:n = 10 输出:12 解释:[1, 2, 3, 4, 5 ...

  4. 【数据结构与算法】之深入解析“丑数”的求解思路与算法示例

    一.题目要求 给你一个整数 n ,请你判断 n 是否为丑数,如果是,返回 true,否则返回 false. 丑数就是只包含质因数 2.3 或 5 的正整数. 示例 1: 输入:n = 6 输出:tru ...

  5. 【数据结构与算法】之深入解析“两数相除”的求解思路与算法示例

    一.题目要求 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. ...

  6. 【数据结构与算法】之深入解析“四数之和”的求解思路与算法示例

    一.题目要求 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target .请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], num ...

  7. 【数据结构与算法】之深入解析“三数之和”的求解思路与算法示例

    一.题目要求 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. 注意:答案中不可 ...

  8. 【数据结构与算法】之深入解析“两数相加II”的求解思路与算法示例

    一.题目要求 给你两个非空链表来代表两个非负整数,数字最高位位于链表开始位置,它们的每个节点只存储一位数字,将这两数相加会返回一个新的链表. 可以假设除了数字 0 之外,这两个数字都不会以零开头. 示 ...

  9. 【数据结构与算法】之深入解析“两数之和”的求解思路与算法示例

    一.题目要求 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...

最新文章

  1. [转]Hadoop家族学习路线图
  2. 网易云信详解B2B企业借力敏捷营销的高增长之道
  3. dwz(jui)刷新当前dialog的方法
  4. CPU缓存和内存屏障
  5. eclipse中hibernate和mybatis中xml配置文件的没有标签提醒解决方法
  6. ComblockEngine 引擎实践
  7. 服务器搜索文件命令,Centos文件搜索命令的讲解
  8. 老黄投下新核弹:英伟达十年力作图灵架构,新GPU支持光线追踪
  9. jQuery-1.9.1源码分析系列(十) 事件系统——事件包装
  10. Spring AOP 本质(1)
  11. wps怎么免费导出简历_简历怎么写 简历模板word免费下载
  12. 万字长文带你回顾电子游戏的七十多年历史(完整版)
  13. 亚马逊aws认证是什么?亚马逊aws认证证书含金量怎么样?
  14. 电脑实时监控信息:CPU 内存 GPU使用率在桌面上动态展现
  15. 计算机专业大学生应该怎么规划未来?
  16. vcu1525 PCIe-DDR4连接方案
  17. 何为内核青年?内在觉醒、内在驱动更有助于人生的成功
  18. 计算机制图用什么图纸,制图用什么笔记本好
  19. 四位密码器c语言编程,请设计 一个密码生成器,要求随机生成4组10位密码(C语言)...
  20. 如今互联网时代,必须学习黑客的思维模式

热门文章

  1. 通话中联系人信息CallerInfo查询
  2. ROS实战(一) 语音交互系统的学习:初步了解语音交互流程
  3. 来吧!一文彻底搞懂引用类型!
  4. 加班动力来自升职欲望?
  5. 魔兽怀旧服怎么找不到服务器,魔兽世界怀旧服服务器断开连接解决方法 魔兽世界怀旧服服务器断开连接怎么办...
  6. iOS学习笔记-068.手势识别02——捏合、拖拽、旋转手势
  7. Go 调用 Windows 的系统 API,检测是否锁屏
  8. 2022怎么开个人淘宝网店?星志远电商
  9. 夏天笔记本很烫怎么办 笔记本散热降温方法推荐
  10. htc+820+android+5.0,Android L附体!全球首款64位手机图赏