小编say*_*jay的帖子

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

我今天在面试时遇到过这个问题,我完全被难过了.这是对问题的描述:

你在一个房间内有一组1到100个灯,还有100个人.第i个人走进房间,打开所有编号为i的倍数的灯.如果该灯已经打开,它们将关闭它(即它们将切换灯光).100只是随机数 - 解决方案应该达到某个任意值N(N ==灯数= =人数).

例如,人1将打开所有灯(因为每个数字是1的倍数).Person 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);
}
Run Code Online (Sandbox Code Playgroud)

我认为一切都很好,直到我回到家并开始查看此功能的输入+输出.我做了这样的事情来得到一些样本结果:

$results = array();
for($j = 1; $j …
Run Code Online (Sandbox Code Playgroud)

php algorithm

7
推荐指数
1
解决办法
1159
查看次数

我如何将这个C#代码翻译成PHP?

我需要以下C#代码的PHP版本:

string dateSince = "2010-02-01";
string siteID = "bash.org";
string sharedSecret = "12345"; // the same combination on my luggage!

using System.Security.Cryptography;

MD5CryptoServiceProvider x = new MD5CryptoServiceProvider();
byte[] dataBytes = System.Text.Encoding.ASCII.GetBytes(string.Format("{0}{1}{2}",   dateSince,  siteID, sharedSecret));
string result = BitConverter.ToString(x.ComputeHash(dataBytes));
Run Code Online (Sandbox Code Playgroud)

...此代码段似乎不完整.但这就是我的想法:

  1. 连接dateSince,siteID和sharedSecret.偷内裤.

  2. ???

  3. 将该字符串转换为ascii编码的字节数组.

  4. 获取该数组的MD5哈希值.

这个神秘的BitConverter对象似乎是将MD5散列数组转换为十六进制数字串.根据前面提到的文档,结果的值应该类似于:"6D-E9-9A-B6-73-D8-10-79-BC-4F-EE-51-A4-84-15-D8"

任何帮助是极大的赞赏!!


忘了早点包括这个.这是我到目前为止所写的PHP版本:

$date_since = "2010-02-01";
$site_id = "bash.org";
$shared_secret = "12345";

$initial_token = $date_since.$site_id.$shared_secret;

$ascii_version = array();
foreach($i=0; $i < strlen($initial_token); $i++) {
    $ascii_version[] = ord(substr($initial_token,$i,1));
}

$md5_version = md5(join("", $ascii_version));

$hexadecimal_bits = array();
foreach($i=0; $i …
Run Code Online (Sandbox Code Playgroud)

php c# porting

5
推荐指数
1
解决办法
260
查看次数

标签 统计

php ×2

algorithm ×1

c# ×1

porting ×1