pascal穷举

来源:百度知道 编辑:UC知道 时间:2024/06/13 23:27:52
小明有5本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则 可有多少种不同的借法 ?
给出PASCAL程序,谢谢

这个其实用高中的组合排列知识可以直接求解,但你要的是穷举算法,所以我就打了一个搜索的程序。因为是在这里直接打的,所以小错误请自行更正。
var
a:array[1..5]of boolean; //a[i]表示第i本书是否借出,是的话a[i]=true。
ans:longint; //记录有多少种方案。

procedure dfs(dep:longint);
var
i:longint;
begin
if dep>3 then begin //如果3个人都有书了就表示找到一种方案
inc(ans);
exit;
end;
for i:=1 to 5 do
if not a[i] then begin //如果穷举到的i这本书没有借出去。
a[i]:=true; //把i借出去。
dfs(dep+1); //搜索下一个人
a[i]:=false; //把i收回来。
end;
end;

begin
fillchar(a,sizeof(a),0); //一开始5本书都没有借出去。
ans:=0; //一开始没有方案数。
dfs(1); //从第一个人开始借。
writeln(ans); //输出方案数。
end.

program book;
var m,n,c:integer;
begin
m:=5*4*3;
n:=3*2*1;
c:=m/n;
write(c)
end.

设:五本书分别为d、e、f、g、h
3*5=15(种)
1.d-A,e-B,f-C
2......
3......
.....

一道典型的枚举题,很容易
源程:
program kk;
var a,b,c,d:integer;
begin
d:=0;//初始