数字排列问题(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. 展开
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. 展开
3个回答
展开全部
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.
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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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.
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,没采纳你的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询