这段代码出了什么问题?试图输出数字模式

时间:2009-08-25 16:28:46

标签: php

有一种模式如下:

1
11
21
1211
111221
...

我正在尝试编写PHP代码来输出它,但我的输出是:

1
11
21
12
11
21
12
...

以下是代码:

<?
$sequence = "1";

for ($i = 0; $i < 99; $i++) {

    echo "{$sequence}<br />";

    $n = 0;
    $x = 0;
    $z = 1;

    $newsequence = "";

    for ($y = count($sequence); $y > 0; $y--) {
        while ($sequence[$n] == $sequence[$n + 1]) {
            $z++;
            $n++;
        }

        $newsequence .= "{$z}{$sequence[$n]}";
    }   

    $sequence = $newsequence;
}

?>

我错过了什么?

2 个答案:

答案 0 :(得分:3)

$sequence是一个字符串,字符串的count()将始终返回1.也许您正在寻找strlen()

答案 1 :(得分:2)

nickf 之外,$n是您序列的索引,但只有在找到两个相同的相同术语时才会更新它。

例如,如果序列为“21”,则跳过while循环,nz保持不变,这意味着您将“12”附加到新序列中,然后进入一个无限循环,因为你的同时仍然会询问“2”。

在您的序列中添加新位后,您需要将计数器n递增1,然后重置“重复计数器”zn的增量会超过您查看的最后一个字符,后面跟着它没有相同的字符。我把以下内容放在一起(不幸的是在PHP中):

while(n < sequence.length) {
  while(n < sequence.length-1 && sequence(n) == sequence(n+1)) {
    z+=1
    n+=1
  }
  next += "%d%s".format(z,sequence(n))
  n+=1
  z=1
}

我得到了这个:

11
21
1211
111221
312211
13112221
1113213211
31131211131221
13211311123113112211
11131221133112132113212221

我认为这就是你所追求的目标。