滴滴出行2016研发工程师笔试题(亮灯问题)

2015盏灯,一开始全部熄灭,序号分别是1-2015,先把1的倍数序号的灯的开关全部按一次,然后把2的倍数的灯的开关全部按一次,然后把3的倍数的开关按一次,以此类推,最后把2015的倍数灯的开关按一次。问最后亮着的灯有多少盏?

  • 43
  • 44
  • 45
  • 46  

问题分析:

初始:全是灭的

1:全部亮

2:1,3,5 ,7,9,11,13。。。

3:1亮,6亮,12亮。

4:1,4,6,8。。。亮

----------------------------------

可以发现1是一直亮着的后面的倍数都是比1大,所以1点击一次后不再点击。

2和3号由于是两次点击不再亮。。

4号由于是3次点击亮  

只有奇数次

可以断定最终奇数次点击的灯是亮着的,偶数次点击是关闭的。

 

题目转换:

1-2015 每个数能被多少个正整数整除,求可以被奇数个正整数整除的总数。

即哪些数有奇数个因子数。

继续看规律。

1:1  奇数个因子数

2:1,2

3:1,3

4:1,2,4 奇数个因子数

5:1,5

6:1,2,3,6

7:1,7

8:1,2,4,8

9:1,3,9  亮  奇数个因子数

。。。。。。

 

可以发现1,4,9,16,25。。才是亮的  

即:1^2,2^2,3^2,4^2,5^2....

最终转换问题,求最大的一个数的平方不大于2015。

43*43=129+(172)*10  满足

44*44 = 176 +1760  满足

45*45 = 225+(1800) 超过

----------------

对于原始问题的编程

复制代码
 1             TimeSpan ts = new TimeSpan();
 2             int count = 0;
 3             DateTime dt = DateTime.Now;
 4             for (int i = 1; i <= 2015; i++)
 5             {
 6                 int index = 1;
 7                 int click = 0;
 8                
 9                 while (index <= i) {
10                     if (i % index == 0)
11                         click += 1;
12                     index += 1;
13                 }
14                 if (click % 2 != 0) {
15                     count += 1;
16                     Console.Write(i+" ");
17                 }
18             }
19             DateTime dt1 = DateTime.Now;
20             ts = dt1 - dt;
21             Console.Write("普通 Count:" + count +"耗时:"+ts);
22             Console.WriteLine("");
23             count = 0 ;
24             DateTime dt2 = DateTime.Now;
25             for (int i = 1; i <= 2015; i++)
26             {
27                 if (i * i <= 2015)
28                 {
29                     count += 1;
30                     Console.Write(i + " ");
31                 }
32                 else
33                 {
34                     break;
35                 }
36             }
37             DateTime dt3 = DateTime.Now;
38             ts = dt3 - dt2;
39             Console.Write("优化 Count:" + count + "耗时:" + ts);
View Code
复制代码

 

这点数据量也是可以看出来还是有那么一些差距的

posted @   root_u  阅读(1147)  评论(2编辑  收藏  举报
编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
点击右上角即可分享
微信分享提示