数字排列问题(pascal语言)

列出所有从数字1到数字n的连续自然数的排列,要求所产生的任意数字序列中不允许出现重复的数字。1<=n<=9样例输入:3样例输出:123132213231312321帮忙修... 列出所有从数字1到数字n的连续自然数的排列,要求所产生的任意数字序列中不允许出现重复的数字。
1<=n<=9
样例输入:
3
样例输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
帮忙修改一下程序。
var a:array [1..9] of integer;
p:array [1..9] of boolean;
n:integer;
procedure main(j:integer);
var i:integer;
begin
for i:=1 to n do
if p[j]=false then
begin
a[j]:=i;
if i=n then
begin
for j:=1 to n do
write(a[i]:5);
writeln;
exit;
end;
p[j]:=true;
main(j+1);
end;
end;
begin
readln(n);
fillchar(p,sizeof(p),0);
fillchar(a,sizeof(a),0);
main(1);
readln;
end.
展开
 我来答
听不清啊
高粉答主

2013-11-30 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

var  a:array [1..9] of integer;

     p:array [1..9] of boolean;

     n:integer;

procedure main(j:integer);

var i:integer;

begin

  for i:=1 to n do

  if p[i]=false then

  begin

    a[j]:=i; p[i]:=true;

    if j=n then

    begin

      for j:=1 to n do

      write(a[j]:5);

      writeln;

    end

    else main(j+1);

    p[i]:=false;

  end;

end;

begin

  readln(n);

  fillchar(p,sizeof(p),0);

  fillchar(a,sizeof(a),0);

  main(1);

  readln;

end.

匿名用户
2013-12-01
展开全部
var b:array[1..9] of boolean;
a:array[1..9] of longint;
n:longint;
procedure s(x:longint);
var i:longint;
begin
if x>n then
begin
for i:=1 to n-1 do
write(a[i],' ');
writeln(a[n]);
exit;
end;
for i:=1 to n do
if b[i] then
begin
b[i]:=false;
a[x]:=i;
s(x+1);
b[i]:=true;
end;
end;

begin
read(n);
fillchar(b,sizeof(b),true);
s(1);
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
工藤某某
2013-11-30 · TA获得超过104个赞
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:68.8万
展开全部
var a:array [1..9] of integer;
p:array [1..9] of boolean;
n:integer;
procedure main(j:integer);
var i:integer;
begin
for i:=1 to n do
if p[i]=false then //这里的i意思是当前将要填入的数字,不是当前将要填入的是第几位,所以把j改成i
begin
a[j]:=i;
if i=n then
begin
for j:=1 to n do
write(a[i]:5);
writeln;
exit;
end;
p[i]:=true; //同理,这里的j也要改成i
main(j+1);
p[i]:=false; //如果在赋值为true后不改成false,那么就会出现这样的情况:输出了1 2 3(此时p[3]=true),然后回溯至第二位,把2变成3,但此时p[3]仍为true,不符合重复条件,于是就不再递归下去了。所以,要添一句p[i]:=false;
end;
end;
begin
readln(n);
fillchar(p,sizeof(p),0);
fillchar(a,sizeof(a),0);
main(1);
readln;
end.
追问
sorry,没采纳你的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式