pascal穷举小明有5本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则 可有多少种不同的借法 给出PASCAL程序,
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 17:50:05
pascal穷举小明有5本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则 可有多少种不同的借法 给出PASCAL程序,
pascal穷举
小明有5本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则 可有多少种不同的借法
给出PASCAL程序,
pascal穷举小明有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.
设:五本书分别为d、e、f、g、h
3*5=15(种)
1.d-A,e-B,f-C
2......
3......
.....
5*4*3=60
program book;
var m,n,c:integer;
begin
m:=5*4*3;
n:=3*2*1;
c:=m/n;
write(c)
end.
一道典型的枚举题,很容易
源程:
program kk;
var a,b,c,d:integer;
begin
d:=0;//初始化累加器
for a:=1 to 5 do//A可能借到的5本
for b:=1 to 5 do//B
for c:=1 to 5 do//C
if (a<>b) and...
全部展开
一道典型的枚举题,很容易
源程:
program kk;
var a,b,c,d:integer;
begin
d:=0;//初始化累加器
for a:=1 to 5 do//A可能借到的5本
for b:=1 to 5 do//B
for c:=1 to 5 do//C
if (a<>b) and (b<>c) and (c<>a) then//确保3人借到的不同
inc(d);//累加
writeln(d);//输出
end. //结束
结果是60种
收起