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.
  • 相关阅读:
    asp.net控件开发基础(17)
    AjaxControlToolkit更新
    asp.net控件开发基础(18)
    asp.net控件开发基础(15)
    新装了vista,不容易啊
    asp.net控件开发基础(19)
    Oracle创建用户及数据表
    RMAN快速入门指南
    Oracle数据库中sql基础
    PL/SQL循序渐进全面学习教程Oracle
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500259.html
Copyright © 2011-2022 走看看