一道pascal题目排列(permutation)【源程序名】permutation.(pas/cpp)【问题描述】有n个人(1≤n≤9),每个人的编号1,2,...,n;请选出r个人参加一个活动,并排成一队,请输出所有可能.结果按照字典排序.
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/13 08:47:09
![一道pascal题目排列(permutation)【源程序名】permutation.(pas/cpp)【问题描述】有n个人(1≤n≤9),每个人的编号1,2,...,n;请选出r个人参加一个活动,并排成一队,请输出所有可能.结果按照字典排序.](/uploads/image/z/1581768-0-8.jpg?t=%E4%B8%80%E9%81%93pascal%E9%A2%98%E7%9B%AE%E6%8E%92%E5%88%97%28permutation%29%E3%80%90%E6%BA%90%E7%A8%8B%E5%BA%8F%E5%90%8D%E3%80%91permutation.%28pas%2Fcpp%29%E3%80%90%E9%97%AE%E9%A2%98%E6%8F%8F%E8%BF%B0%E3%80%91%E6%9C%89n%E4%B8%AA%E4%BA%BA%EF%BC%881%E2%89%A4n%E2%89%A49%EF%BC%89%2C%E6%AF%8F%E4%B8%AA%E4%BA%BA%E7%9A%84%E7%BC%96%E5%8F%B71%2C2%2C...%2Cn%EF%BC%9B%E8%AF%B7%E9%80%89%E5%87%BAr%E4%B8%AA%E4%BA%BA%E5%8F%82%E5%8A%A0%E4%B8%80%E4%B8%AA%E6%B4%BB%E5%8A%A8%2C%E5%B9%B6%E6%8E%92%E6%88%90%E4%B8%80%E9%98%9F%2C%E8%AF%B7%E8%BE%93%E5%87%BA%E6%89%80%E6%9C%89%E5%8F%AF%E8%83%BD.%E7%BB%93%E6%9E%9C%E6%8C%89%E7%85%A7%E5%AD%97%E5%85%B8%E6%8E%92%E5%BA%8F.)
一道pascal题目排列(permutation)【源程序名】permutation.(pas/cpp)【问题描述】有n个人(1≤n≤9),每个人的编号1,2,...,n;请选出r个人参加一个活动,并排成一队,请输出所有可能.结果按照字典排序.
一道pascal题目
排列(permutation)
【源程序名】permutation.(pas/cpp)
【问题描述】有n个人(1≤n≤9),每个人的编号1,2,...,n;请选出r个人参加一个活动,并排成一队,请输出所有可能.结果按照字典排序.
【输入数据】输入数据两行,第一行包含一个整数n(1≤n≤9),表示共有n个人,第二行包含一个整数r(1≤r≤n),表示共有r个人参加活动.
【输出数据】输出数据每一种排列占一行,为这r个人的编号,编号之间有一个空格,排列按照字典顺序输出.
【测试样例】
输入
3
3
输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
一道pascal题目排列(permutation)【源程序名】permutation.(pas/cpp)【问题描述】有n个人(1≤n≤9),每个人的编号1,2,...,n;请选出r个人参加一个活动,并排成一队,请输出所有可能.结果按照字典排序.
很简单,用深度优先搜索,我没做优化,当n=9,r=9时,需要一定时间.
var
n,r,k:byte;
f:array [1..9] of boolean;
a:array [1..9] of byte;
procedure permutation(i:byte);
var j:byte;
begin
if i=r+1 then
begin
for k:=1 to r-1 do
write(a[k],' ');
writeln(a[r]);
exit;
end;
for j:=1 to n do
if f[j] then
begin
f[j]:=false;
a[i]:=j;
permutation(i+1);
f[j]:=true;
end;
end;
begin
fillchar(f,sizeof(f),true);
readln(n);
readln(r);
permutation(1);
end.