pascal穷举小明有5本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则 可有多少种不同的借法 给出PASCAL程序,
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/06 16:21:03
![pascal穷举小明有5本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则 可有多少种不同的借法 给出PASCAL程序,](/uploads/image/z/14912073-9-3.jpg?t=pascal%E7%A9%B7%E4%B8%BE%E5%B0%8F%E6%98%8E%E6%9C%895%E6%9C%AC%E6%96%B0%E4%B9%A6%2C%E8%A6%81%E5%80%9F%E7%BB%99A%2CB%2CC%E4%B8%89%E4%BD%8D%E5%B0%8F%E6%9C%8B%E5%8F%8B%2C%E8%8B%A5%E6%AF%8F%E4%BA%BA%E6%AF%8F%E6%AC%A1%E5%8F%AA%E8%83%BD%E5%80%9F%E4%B8%80%E6%9C%AC%2C%E5%88%99+%E5%8F%AF%E6%9C%89%E5%A4%9A%E5%B0%91%E7%A7%8D%E4%B8%8D%E5%90%8C%E7%9A%84%E5%80%9F%E6%B3%95+%E7%BB%99%E5%87%BAPASCAL%E7%A8%8B%E5%BA%8F%EF%BC%8C)
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种
收起