zoukankan      html  css  js  c++  java
  • 字符序列pascal程序

    Description

    从三个元素的集合[A,B,C]中选取元素生成一个N个字符组成的序列,使得没有两个相邻字的子序列相同。例:N = 5时ABCBA是合格的,而序列ABCBC与ABABC是不合格的,因为其中子序列BC,AB是相同的。

    Input

    对于由键盘输入的N(1<=n<=10)

    Output

    求出满足条件的N个字符的所有序列和其总数?

    Sample Input

    3

    Sample Output

    ABA
    ABC
    ACA
    ACB
    BAB
    BAC
    BCA
    BCB
    CAB
    CAC
    CBA
    CBC
    12



    这题我是用搜索的方法来做的

    在搜的时候,如果这个字母填下去不会有两个相邻的子序列的话,就记录下来,填完了就输出并统计。



    var
    a:array[0..100]of longint;
    n,tj,i,j,k,s,bz:longint;
    
    function check(x,l:longint):longint;
    var
    i,j:longint;
    begin
        a[l]:=x;
        check:=1;
        for i:=1 to l div 2 do
        begin
            for j:=1 to i do
            if a[l-j+1]<>a[l-i-j+1] then inc(bz);
            if bz=0 then check:=0;
            bz:=0;
        end;
        a[l]:=0;
    end;
    procedure print;
    var
    i:longint;
    begin
        inc(tj);
        for i:=1 to n do
        if a[i]=1 then write('A') else if a[i]=2 then write('B') else write('C');
        writeln;
    end;
    procedure search(dep:longint);
    var
    i,j:longint;
    begin
        if dep>n then
        begin
            print;
            exit;
        end;
        for i:=1 to 3 do
        if check(i,dep)=1 then
        begin
            a[dep]:=i;
            search(dep+1);
            a[dep]:=0;
        end;
    end;
    begin
        read(n);tj:=0;
        fillchar(a,sizeof(a),0);
        search(1);
        write(tj);
    end.


  • 相关阅读:
    redis集群搭建
    redis状态查看
    redis动态修改参数配置
    redis的info
    redis安装配置
    redis命令总结
    rabbitmq安装
    怎么把U盘启动改为硬盘启动(适用于U盘安装系统时)
    监控宝篇之一(快速入门)
    raid详解
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500243.html
Copyright © 2011-2022 走看看