回 帖 发 新 帖 刷新版面

主题:tju1002

晕~~~~~~~~~~~
根本想不出办法,请高手提示一下
+30~50分

回复列表 (共5个回复)

沙发

Problem
将一个字符组全排序

Input
一个长度小于10的字符串,该字符串由数字1~9组成。字符不会重复出现。

Output
按数字在输入串中出现的次序从小到大的顺序输出该字符组的全排序

Sample Input
132

Sample Output
1 3 2
1 2 3
3 1 2
3 2 1
2 1 3
2 3 1

板凳

就是生成排列数,不过不是数字,而是数字的位置
比较简单的方法:
program tju1002;
var
pos:array [1..11] of integer;
f:array [1..11] of boolean;
n:integer;
str:string;

procedure work(k:integer);
var
i:integer;
begin
if k>n then
  begin
   for i:=1 to n do
    write(str[pos[i]]);
   writeln;
   exit;
  end;
for i:=1 to n do
  if not f[i] then
   begin
    f[i]:=true;
    pos[k]:=i
    work(k+1);
    f[i]:=false;
   end;
end;

begin
fillchar(f,sizeof(f),0);
readln(str);
n:=length(str);
work(1);
end.

3 楼

我是新手,看不太懂,可不可以说说方法?

4 楼



你的程序有错误!于是我改了一下:
program tju1002;
var
pos:array [1..11] of integer;
f:array [1..11] of boolean;
n:integer;
str:string;

procedure work(k:integer);
var
i:integer;
begin
if k>n then
  begin
   for i:=1 to n do
    begin
     write(str[pos[i]]);
     if i=n
     then writeln
     else write(' ');
    end;
   exit;
  end;
for i:=1 to n do
  if not f[i] then
   begin
    f[i]:=true;
    pos[k]:=i;
    work(k+1);
    f[i]:=false;
   end;
end;

begin
fillchar(f,sizeof(f),0);
readln(str);
n:=length(str);
work(1);
end.
AC了。
[em2][em2][em2][em2][em2][em2][em2]

5 楼

我来回复

您尚未登录,请登录后再回复。点此登录或注册