Look And Say 序列php实现代码

比如:
第一个数字是:1。
看着第一个数字你可以说1个1,那么第二个数字就是:11。
看着第二个数字你可以说2个1,即第三个数字是:21。
看着第三个数字你可以说1个2,1个1,即第四个数字是:1211。
看着第四个数字你可以说1个1,1个2,2个1,即第五个数字是:111221。
…………
根据详细的说明可以参见:http://en.wikipedia.org/wiki/Look-and-say_sequence
下面用PHP实现这个序列,如下:


代码如下:

function look($str)
{
$len = strlen($str);
$count=0;
$result='';
$temp=$str[0];
for($i=0;$i<$len;$i++)
{
if($temp!=$str[$i])
{
$result.=$count.$temp;

$temp = $str[$i];
$count=1;
}
else
{
$count++;
}
}
$result.=$count.$temp;
return $result;
}

$test_str = "1";
echo $test_str.'</br>';
for($i=0;$i<10;$i++)
{
$test_str=look($test_str);
print $test_str."</br>";
}

注意look函数中的for循环,当$len-1时,$result并未累加最后一位数字的统计结果,所以在循环完成后再次累加一次。

最后输出结果:

1
11
21
1211
111221
312211
13112221
1113213211
31131211131221
13211311123113112211
11131221133112132113212221

作者:ywxgod

(0)

相关推荐

  • Collatz 序列、逗号代码、字符图网格实例

    1.collatz序列 编写一个名为 collatz()的函数,它 有一个名为 number 的参数.如果参数是偶数, 那么 collatz()就打印出 number // 2,并返回该值.如果 number 是奇数,collatz()就打 印并返回 3 * number + 1. 然后编写一个程序,让用户输入一个整数,并不断对这个数调用 collatz(),直 到函数返回值1. #!/usr/bin/env python3 # -*- coding:utf-8 -*- def collatz(

  • perl 指定长度并生成一个随机的DNA序列的脚本代码

    复制代码 代码如下: #!/bin/perl use strict;  use warnings; #进行定义  my @dna;  my $dna_length;  my $newbase;  my $i=0; print "please input the DNA length\n";  chomp($dna_length=<>); while($i<$dna_length)  {    #从四个碱基中随机选取一个    my(@nucleotides)=qw/A

  • Look And Say 序列php实现代码

    比如: 第一个数字是:1. 看着第一个数字你可以说1个1,那么第二个数字就是:11. 看着第二个数字你可以说2个1,即第三个数字是:21. 看着第三个数字你可以说1个2,1个1,即第四个数字是:1211. 看着第四个数字你可以说1个1,1个2,2个1,即第五个数字是:111221. ---- 根据详细的说明可以参见:http://en.wikipedia.org/wiki/Look-and-say_sequence 下面用PHP实现这个序列,如下: 复制代码 代码如下: function loo

  • js DNA动态序列比对代码

    动态序列比对 function pairaln(seq1, seq2){ // scoring scheme var MATCH = 1; // +1 for letters that match var MISMATCH = -1; // -1 for letters that mismatch var GAP = -1; // -1 for any gap // initialization var score=[[]]; var pointer=[[]]; score[0][0] = 0;

  • Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例

    问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(trigger)和序列(sequence)来模式实现. 示例: 1.建立表 复制代码 代码如下: create table user  (       id   number(6) not null,       name   varchar2(30)   not null primary key  )

  • SQL Server 实现数字辅助表实例代码

    数字辅助表是一个连续整数的数列,通常用来实现多种不同的查询任务.大多分两类:足够大物理数字表和表函数,前者可以称为静态的,后者可以称为动态且按需生产. 物理数字表 物理数字表通常存在一个物理表,表记录相对足够大,相关的T-SQL代码如下: IF OBJECT_ID(N'dbo.Nums', 'U') IS NOT NULL BEGIN DROP TABLE dbo.Nums; END GO CREATE TABLE dbo.Nums ( Num INT NOT NULL, CONSTRAINT

  • 判断整数序列是否为二元查找树的后序遍历结果的解决方法

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false.例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果.    8    / \  6   10 / \    / \ 5  7 9 11因此返回true.如果输入7.4.6.5,没有哪棵树的后序遍历的结果是这个序列,因此返回false.本题网上已经有用递归单纯判断的解法. 个人解法: 先得到序列对应的中序序列, 然后看中序序列是否从小到大有序, 得出判断. 相比

  • java 基本算法之归并排序实例代码

    java 基本算法之归并排序实例代码 原理:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表, * 即把待排序序列分为若干个子序列,每个子序列是有序的.      * 然后再把有序子序列合并为整体有序序列. 实例代码: public class MergeSort { /** * * * * @param args */ public static void main(String[] args) { int a[] = { 49, 38, 65, 97, 76, 13,

  • Redis实现分布式锁和等待序列的方法示例

    在集群下,经常会因为同时处理发生资源争抢和并发问题,但是我们都知道同步锁 synchronized . cas . ReentrankLock 这些锁的作用范围都是 JVM ,说白了在集群下没啥用.这时我们就需要能在多台 JVM 之间决定执行顺序的锁了,现在分布式锁主要有 redis . Zookeeper 实现的,还有数据库的方式,不过性能太差,也就是需要一个第三方的监管. 背景 最近在做一个消费 Kafka 消息的时候发现,由于线上的消费者过多,经常会遇到,多个机器同时处理一个主键类型的数据

  • C语言实现出栈序列

    本文实例为大家分享了C语言实现出栈序列的具体代码,供大家参考,具体内容如下 题目描述: 现在有一个1-n的排列,入栈序列已知,请给出字典序最大的出栈序列. 输入格式 第一行一个整数n.(1<=n<=100) 第二行n个整数,数据确保为1-n的排列. 输出格式 输出n个整数,既字典序最大的出栈序列. 输入样例 5 1 2 4 5 3 输出样例 5 4 3 2 1 解题思路: 1.获取当前数组的最大值,并且需要知道它的下标.所以定义了两个方法,getMax来获取数组的最大值maxNum,getMa

随机推荐