主题:tju1002
fxzxg
[专家分:430] 发布于 2005-10-05 11:05:00
晕~~~~~~~~~~~
根本想不出办法,请高手提示一下
+30~50分
回复列表 (共5个回复)
沙发
fxzxg [专家分:430] 发布于 2005-10-05 11:06:00
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
板凳
林记 [专家分:1680] 发布于 2005-10-05 12:57:00
就是生成排列数,不过不是数字,而是数字的位置
比较简单的方法:
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 楼
fxzxg [专家分:430] 发布于 2005-10-07 08:37:00
我是新手,看不太懂,可不可以说说方法?
4 楼
fxzxg [专家分:430] 发布于 2005-10-07 08:48:00
你的程序有错误!于是我改了一下:
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 楼
林记 [专家分:1680] 发布于 2005-10-07 15:35:00
好
我来回复