php - 根据计数器随机化,计数器以与开始时完全相同的值结束

标签 php algorithm counter

我在使用奇怪的代码结构时遇到了一些麻烦,经过 2 小时的尝试和错误后,我似乎找不到问题的答案。

我有 2 个变量和一个带有一些子数组的数组结构(这对以后很重要)系统太大无法发布完整代码所以这里是问题部分:

$counter= 10;
$times = 20;
//Random 1 / 0

while($times > 0){
    $number = rand(0,1);
    if($number == 1) {
        $counter++;
    } else {
        $counter--;
    }
$times--;
}

所以这很简单,但是问题是开始时为 10 的 $total 也必须以 10 结束,因此必须有 10 次 10 的 10 倍.

我尝试使用以下方法解决它:

$number  = 0;
if ($counter > 0) { 
    $number = 1; 
    $counter--;
}

这很有效并且是一个简单的解决方案,但请参阅“加法 1”

但这必须是随机的。这些位置中的每一个在实际程序中都是一个数组,因此无法对数组进行混洗。

TLDR:我只需要打乱数组的一部分,或者必须随机生成 0 or 1使用第一个代码示例中的给定代码。老实说,我现在不知道该怎么做,所以非常感谢您的帮助。

补充 1:

array(
      array('I' => 1, 'X' => '7'),  
      array('I' => 1, 'X' => '7'),  
      array('I' => 1, 'X' => 'value'), 
      array('I' => 1, 'X' => 'value'), 
      array('I' => 1, 'X' => 'value'),
      array('I' => 1, 'X' => 'value'),
      array('I' => 1, 'X' => 'value'),
      array('I' => 1, 'X' => 'value'),
      array('I' => 1, 'X' => 'value'),
      array('I' => 1, 'X' => 'value'),
      array('I' => 0, 'X' => 'value'),
      array('I' => 0, 'X' => 'value'),
      array('I' => 0, 'X' => 'value'),
      array('I' => 0, 'X' => 'value'),
      array('I' => 0, 'X' => 'value'),
      array('I' => 0, 'X' => 'value'),
      array('I' => 0, 'X' => 'value'),
      array('I' => 0, 'X' => 'value'),
      array('I' => 0, 'X' => 'value'),
      array('I' => 0, 'X' => 'value'),
);

每个值可以出现 2 次(不会总是出现 2 次),如果是这种情况,则 2 个值之一必须是 'I' => 1 和 'I' => 0 但 X 充满了还有一个随机的:

$x = rand(1, 100)

如果我对最初的帖子不清楚,那么这是实际的结构,我想现在我的问题更清楚了。

补充 2:

预期结果:

//This is correct
'I' => 1, 'X' => 7
'I' => 0, 'X' => 7

//This is not correct:

'I' => 1, 'X' => 7
'I' => 1, 'X' => 7

//This is not correct
'I' => 0, 'X' => 7
'I' => 0, 'X' => 7
  • 10 次“我”=> 1
  • 10 次“我”=> 0
  • 如果“X”出现 2 次,请参见上面的代码示例:

最佳答案

最简单的解决方案就是执行 Fisher-Yates Shuffle .

它是这样工作的:

  1. 在数组中随机选择一个元素作为最后一个。将它与最后一个交换,这样正确的事情现在就在最后。
  2. 在最后一个以外的任意位置选择元素作为最后一个。将它与最后一个交换,这样正确的事情现在就在最后。
  3. 重复向上移动数组,直到您选择了每个位置的内容。

关于php - 根据计数器随机化,计数器以与开始时完全相同的值结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49389017/

相关文章:

c++ - __COUNTER__ 宏问题。不显示值

php - 什么是 & in return($var & 1) 在 PHP 中

php - 使用 Zend 框架调用多个存储过程

php - 无法从 JSON 文件获取正确的值到 MySQL 服务器

php - 是否可以将 Javascript IDE 集成到 Eclipse PDT 中?

javascript - 将数组从一种格式转换为另一种格式时出现问题

java - Java 中的 Blowfish 实现

java - 使用 Hadoop 计数器 - 多个作业

algorithm - 从集合中删除坏数的有效算法

python - 带默认值的嵌套字典