zoukankan      html  css  js  c++  java
  • 有重复元素的排列问题pascal题解

    var
    l,i,tj:longint;
    a:array['a'..'z']of longint;
    x,c:char;
    b:array[0..500]of char;
    procedure print;
    begin
        for i:=1 to l do//要一个一个输出,不能直接write(b),不然就输出不出来
        write(b[i]);
        writeln;//换行
        inc(tj);
    end;
    procedure search(x:char;dep:longint);//dep是当前要填的位置
    var
    i:char;
    begin
        if dep>l then//如果填的位置大于长度那么就输出
        begin
            print;
            exit;
        end;
        for i:=x to 'z' do
        if a[i]>0 then//如果i字符还有没填的话,就回溯
        begin
            b[dep]:=i;//填数
            dec(a[i]);//i字符的数量-1
            if a[x]>0 then search(x,dep+1) else search(chr(ord(x)+1),dep+1);//如果x字符在原串中还有出现次数就继续搜
            inc(a[i]);//回溯
        end;
    end;
    begin
        readln(l);// l个元素,也是排列的长度
        for i:=1 to l do
        begin
            read(x);
            inc(a[x]);//统计每个元素有几个
        end;
        tj:=0;//tj是排列总数
        c:='a';
        while a[c]=0 do c:=chr(ord(c)+1);//找到原串中第一个在26个字母中出现的字符
        search(c,1);//搜索
        write(tj);//输出数量
    end.
  • 相关阅读:
    wait waitpid
    达梦备份还原
    sigprocmask阻塞信号
    sigaction信号处理
    dd命令
    linux系统启动过程
    cpio建立、还原备份档
    configure详解
    Git入门基础教程
    一篇文章了解Github和Git教程
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500259.html
Copyright © 2011-2022 走看看