将灯光切换到N的算法是什么?

萨亚杰

我今天在一次求职面试中遇到了这个问题,我完全感到沮丧。这是问题的描述:

您在一个房间内有1到100盏照明灯,并且有100人。i个人走进房间,打开所有编号为i倍数的灯如果该灯已经打开,则他们将其关闭(即,它们将切换该灯)。100只是随机数-解决方案应达到某个任意值N(N ==灯光数量==人数)。

例如,人1将打开所有灯(因为每个数字都是1的倍数)。人2将切换所有2的倍数的光(2、4、6、8,依此类推)。这一直持续到第100位。

当时,我感到这可能与尝试确定最多N的素数有关,但是我不确定100%的正确性,所以我采用了一种蛮力方法(这大致就是我提供的方法)在PHP中):

function lights_toggled($number_of_lights) {
  $toggly = function($idx, $lights) {
    foreach($lights as $i => $light) {
      if($i % $idx == 0) {
        if($lights[$i]) {
          $lights[$i] = 0;
        } else if(!$lights[$i]) {
          $lights[$i] = 1;
        } 
      } 
    } 
    return $lights;
  };

  $lights = array_fill(1,$number_of_lights,0);
  for($i = 1; $i <= count($lights); $i++) {
    $lights = $toggly($i, $lights);
  }
  return array_sum($lights);
}

我以为一切都很好,直到我回到家并开始查看该功能的输入和输出。我这样做是为了得到一些样本结果:

$results = array();
for($j = 1; $j <= 100; $j++) {
  $number_of_lights_on = lights_toggled($j);
  $results[$number_of_lights_on][] = $j;
}
print_r($results);

它很长,所以这是当#个灯亮== 3或4时的输出片段:

...
[3] => Array
    (
        [0] => 9
        [1] => 10
        [2] => 11
        [3] => 12
        [4] => 13
        [5] => 14
        [6] => 15
    )

[4] => Array
    (
        [0] => 16
        [1] => 17
        [2] => 18
        [3] => 19
        [4] => 20
        [5] => 21
        [6] => 22
        [7] => 23
        [8] => 24
    )
...

当灯的数量在9到15之间时,答案是3灯亮。当灯的数量在16到24之间时,答案是4灯亮。基本上,似乎当x灯返回作为答案时,总灯数的下限是x ^ 2,而上限是x(x + 2)

我开始在这里看到结构,但是我无法确定这个结果是否遵循了我不记得或不知道的算法。

琥珀色

这个问题在传统上被称为“更衣室问题”-在网络上对此有很多解释,例如:

http://mathforum.org/library/drmath/view/55812.html

其要点是,除数为偶数的那些将以其初始状态结束,而除数为奇数的那些将以相反的状态结束。尽管除数的确很好地影响了质数,但这实际上与质数无关

特别是,其中有奇数个约数的数字都是....击鼓声......完美的正方形。由于除平方根以外的任何其他除数都将具有匹配且不相等的除数,但是理想平方具有一个额外的除数(平方根),该除数不与另一个除数配对。它与自身配对。


请注意,对于您所说的特定问题(有多少个未解决的问题),这意味着答案仅是floor(sqrt(N))针对N灯光,因为这是有多少个理想平方小于或等于N

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Java程序从UDP切换到TCP的最简单方法是什么?

来自分类Dev

将 Drupal 网站/服务器切换到 HTTP2 的步骤是什么

来自分类Dev

切换到普通用户的命令是什么?

来自分类Dev

切换到普通用户的命令是什么?

来自分类Dev

是什么阻止了用户空间程序切换到更高级别?

来自分类Dev

在vimperator中手动切换到“提示”模式的命令是什么?

来自分类Dev

使用libre office时切换到下标或上标的键盘快捷方式是什么

来自分类Dev

将CIFilters切换到视频

来自分类Dev

将列值切换到左侧

来自分类Dev

将数据从数组切换到向量

来自分类Dev

将 Joomla 切换到 Wordpress

来自分类Dev

为什么不蚀将编译器切换到Java 8?

来自分类Dev

为什么不建议将 React 组件从受控切换到非受控?

来自分类Dev

是什么原因导致我的VM的操作系统挂起“切换到Clocksource精致时钟”?

来自分类Dev

设备模式切换到移动设备时,在Chrome Devtools检查元素中可以放大的热键是什么?

来自分类Dev

从主XAML形式切换到第二个XAML形式的C ++代码是什么

来自分类Dev

切换到Ubuntu

来自分类Dev

从AndEngine切换到libgdx-了解什么?

来自分类Dev

从ubuntu切换到kubuntu。使用什么应用程序?

来自分类Dev

从AndEngine切换到libgdx-要知道什么?

来自分类Dev

为什么Microsoft Word切换到法语拼写检查?

来自分类Dev

RESTAdapter与本地存储。为什么要切换到RESTAdapter?

来自分类Dev

为什么Ubuntu通过lightDM切换到GDM

来自分类Dev

将交换链切换到窗口模式

来自分类Dev

如何将嵌套列表切换到数组

来自分类Dev

调试后自动将XCode切换到Project Navigator

来自分类Dev

使用Segues将UINavigationViewController切换到UITabBarController

来自分类Dev

如何将显示从无切换到表格单元?

来自分类Dev

用户输入后将perl进程切换到后台

Related 相关文章

  1. 1

    将Java程序从UDP切换到TCP的最简单方法是什么?

  2. 2

    将 Drupal 网站/服务器切换到 HTTP2 的步骤是什么

  3. 3

    切换到普通用户的命令是什么?

  4. 4

    切换到普通用户的命令是什么?

  5. 5

    是什么阻止了用户空间程序切换到更高级别?

  6. 6

    在vimperator中手动切换到“提示”模式的命令是什么?

  7. 7

    使用libre office时切换到下标或上标的键盘快捷方式是什么

  8. 8

    将CIFilters切换到视频

  9. 9

    将列值切换到左侧

  10. 10

    将数据从数组切换到向量

  11. 11

    将 Joomla 切换到 Wordpress

  12. 12

    为什么不蚀将编译器切换到Java 8?

  13. 13

    为什么不建议将 React 组件从受控切换到非受控?

  14. 14

    是什么原因导致我的VM的操作系统挂起“切换到Clocksource精致时钟”?

  15. 15

    设备模式切换到移动设备时,在Chrome Devtools检查元素中可以放大的热键是什么?

  16. 16

    从主XAML形式切换到第二个XAML形式的C ++代码是什么

  17. 17

    切换到Ubuntu

  18. 18

    从AndEngine切换到libgdx-了解什么?

  19. 19

    从ubuntu切换到kubuntu。使用什么应用程序?

  20. 20

    从AndEngine切换到libgdx-要知道什么?

  21. 21

    为什么Microsoft Word切换到法语拼写检查?

  22. 22

    RESTAdapter与本地存储。为什么要切换到RESTAdapter?

  23. 23

    为什么Ubuntu通过lightDM切换到GDM

  24. 24

    将交换链切换到窗口模式

  25. 25

    如何将嵌套列表切换到数组

  26. 26

    调试后自动将XCode切换到Project Navigator

  27. 27

    使用Segues将UINavigationViewController切换到UITabBarController

  28. 28

    如何将显示从无切换到表格单元?

  29. 29

    用户输入后将perl进程切换到后台

热门标签

归档