有一种模式如下:
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;
}
?>
我错过了什么?
答案 0 :(得分:3)
$sequence
是一个字符串,字符串的count()
将始终返回1.也许您正在寻找strlen()
?
答案 1 :(得分:2)
除 nickf 之外,$n
是您序列的索引,但只有在找到两个相同的相同术语时才会更新它。
例如,如果序列为“21”,则跳过while循环,n
和z
保持不变,这意味着您将“12”附加到新序列中,然后进入一个无限循环,因为你的同时仍然会询问“2”。
在您的序列中添加新位后,您需要将计数器n
递增1,然后重置“重复计数器”z
。 n
的增量会超过您查看的最后一个字符,后面跟着它没有相同的字符。我把以下内容放在一起(不幸的是在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
我认为这就是你所追求的目标。