【问题标题】:Creating an N x N array of integers that "staircase" and "wrap around"创建一个“阶梯式”和“环绕式”的整数 N x N 数组
【发布时间】:2012-04-29 11:47:14
【问题描述】:

我无法弄清楚如何按如下顺序获取数据。总数无关紧要;它会按照 0、1、2、3、4、5、6 等逻辑顺序的任何数字遵循相同的模式。所以基本上,从 0、2、3、4 等开始,其中 1 将被放置之后最大数,其中0可以是我静态设置的变量。我在一直到最大数量然后继续时遇到问题,例如

..., 97, 98, 99, 100, 1, 2, ...

然后按顺序进行,

..., 98, 99, 100, 1, 2, 3, ...

以此类推,直到 1、2、3、4、5、6,...

并将其全部存储到下面的多维数组中。

$set = array(
    array('0','0','0','0','0','0','0','0','0','0','0'),
    array('0','2','3','4','5','6','7','8','9','10','1'),
    array('0','3','4','5','6','7','8','9','10','1','2'),
    array('0','4','5','6','7','8','9','10','1','2','3'),
    array('0','5','6','7','8','9','10','1','2','3','4'),
    array('0','6','7','8','9','10','1','2','3','4','5'),
    array('0','7','8','9','10','1','2','3','4','5','6'),
    array('0','8','9','10','1','2','3','4','5','6','7'),
    array('0','9','10','1','2','3','4','5','6','7','8'),
    array('0','10','1','2','3','4','5','6','7','8','9'),
    array('0','1','2','3','4','5','6','7','8','9','10'),
); 

我这样做是因为我无法找出循环模式;如果我能弄清楚,我就不需要手动输入数据,并且可以按照这种模式创建一个可以选择任何数字的表单。

【问题讨论】:

  • 您正在尝试构建一个N x M 数组,其中只有数字“楼梯框”?

标签: php arrays multidimensional-array for-loop


【解决方案1】:
$array = array();
$max = 10;
for ($i = 0; $i < $max; $i++)
{
    $num = $i + 2;
    $array[$i][] = 0;
    for ($j = 0; $j < $max; $j++)
    {
        if ($num == $max + 1)
            $num = 1;
        $array[$i][] = $num;
        $num++;
    }
}
var_dump($array);

【讨论】:

    【解决方案2】:

    请注意,除了第一行和第一列,每一行都只是前一个左移,加上下一个值:

    $max = 10;
    
    // First row (full of 0)
    $set = array(array_fill(0, $max + 1, 0));
    
    $row = array();
    for($i = 1; $i <= $max; $i++)
        $row[] = $i;
    $row[] = 1; // $row  = [2,3,4,...,$max,1]
    
    for($i = 0; $i < $max; $i++){
        $set[] = array_merge(array(0), $row);
        $row = array_map(function($x) use ($max){ // Requires PHP 5.3
            $result = ($x + 1) % $max;
            return 0 === $result ? $max : $result;
        }, $row);
    }
    

    Codepad

    如果你需要的话,用这个存储字符串代替整数当然是相当简单的。

    【讨论】:

    • 谢谢!这是完美的,我将做一些研究来找出函数($x),因为我真的很想了解发生了什么!无论如何,这都能很好地解决问题!再次感谢!
    【解决方案3】:

    请试试这个.. 这是 Java 版本。希望这符合您的要求。您可能需要将零设置为数组的第一行。

    算法

    int max = 12;
    int[][] array = new int[max + 1][max + 1];
    int counter = 0;
    for(int i = 0; i < max + 1 ; i ++)
    {
        array[i][0] = 0;
        counter = i+1;
        for(int j = 1 ; j < max + 1 ; j++)
        {
            int value ;
            if(counter <= max)
                value = max - ( max - counter );
            else
                value = counter - max;
            counter++;
            array[i][j] = value;
            System.out.print(" " + array[i][j]);
        }
    
        System.out.println("");
    }
    

    输出

    1 2 3 4 5 6 7 8 9 10 11 12
     2 3 4 5 6 7 8 9 10 11 12 1
     3 4 5 6 7 8 9 10 11 12 1 2
     4 5 6 7 8 9 10 11 12 1 2 3
     5 6 7 8 9 10 11 12 1 2 3 4
     6 7 8 9 10 11 12 1 2 3 4 5
     7 8 9 10 11 12 1 2 3 4 5 6
     8 9 10 11 12 1 2 3 4 5 6 7
     9 10 11 12 1 2 3 4 5 6 7 8
     10 11 12 1 2 3 4 5 6 7 8 9
     11 12 1 2 3 4 5 6 7 8 9 10
     12 1 2 3 4 5 6 7 8 9 10 11
     1 2 3 4 5 6 7 8 9 10 11 12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 2012-11-30
      • 2012-01-08
      • 2018-05-27
      • 2011-07-03
      • 2021-07-12
      • 2016-09-01
      相关资源
      最近更新 更多