zoukankan      html  css  js  c++  java
  • 滴滴出行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

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

    一个苦逼程序员
  • 相关阅读:
    How To Install a 2 Finger Gripper on ABB Robots
    Guide: How to Set Up I/O on an ABB Robot with an IRC5 Controller
    SIGVerse
    unity与ROS SIGVerse 仿真
    论文阅读:Automated acquisition of structured, semantic models of manipulation activities from human VR demonstration
    Python2.7+ROS环境:AttributeError:‘module’ has no attribute ‘CALIB_HAND_EYE_TSAI
    Qt音视频开发39-人脸识别在线版
    Qt音视频开发38-USB摄像头解码linux方案
    Qt音视频开发37-USB摄像头解码ffmpeg方案
    由浅入深讲述MVVM
  • 原文地址:https://www.cnblogs.com/root_u/p/5168948.html
Copyright © 2011-2022 走看看