主题:[讨论]谁能用PASCAL语言,帮我做一下这道题,谢谢
interegg
[专家分:80] 发布于 2006-08-23 08:58:00
[b]排列列举:第一年把五件礼物发给五个孩子,第二年又把同样的五件礼物给发给这五个孩子,而每个孩子的礼品都与上年的不同,请编程找出所有的方案。(请用PASCAL语言,谢谢)[/b]
回复列表 (共20个回复)
沙发
tl3shi [专家分:110] 发布于 2006-08-23 19:11:00
偶也不懂啊!我是菜鸟啊1!
不过我猜可能要用到枚举和子界类型!!!
要是只算有多少种的话1就要简单些了1但是要写出每种方案的话1就要麻烦些!!
呵呵!偶也不懂啊1
板凳
interegg [专家分:80] 发布于 2006-08-24 08:00:00
用了枚举,子界类型会更明了。你觉得算有几种,有什么好的方法?谢谢。
3 楼
dorremon1992 [专家分:870] 发布于 2006-08-24 17:15:00
排列组合吧
套公式
4 楼
interegg [专家分:80] 发布于 2006-08-24 18:36:00
如何套啊?谢谢。
5 楼
济公二世 [专家分:200] 发布于 2006-08-24 21:50:00
用递归省时间.
用5重循环也行的.
6 楼
lgr7000 [专家分:230] 发布于 2006-08-25 00:12:00
呵呵,用深度搜索做吧,其实这是一个简单的排列问题
var
s:array[1..5] of integer;{代表五个孩子}
n,p,i,t:integer;
begin
n:=5; s[1]:=1; p:=1;
while p>0 do {分配礼物}
begin
t:=0;
for i:=1 to p-1 do
if s[p]=s[i] then t:=1; {检测礼物有否重复}
if t=0 then
if p=n then
begin
for i:=1 to n do
write(s[i],' ');writeln;
end
else
begin p:=p+1; s[p]:=0; end;
while (p>0)and(s[p]=5) do p:=p-1;
if p>0 then inc(s[p]);
end;
end.
7 楼
interegg [专家分:80] 发布于 2006-08-25 08:13:00
谢谢拉。
8 楼
dorremon1992 [专家分:870] 发布于 2006-08-25 15:35:00
好像是 5*4*3*2*1+4*3*2*1*1
9 楼
interegg [专家分:80] 发布于 2006-08-25 16:03:00
这是什么意思啊?我不太懂。是怎么得出来的
10 楼
lmj9201 [专家分:1400] 发布于 2006-08-29 14:29:00
var
k:array[1..120,1..5]of integer;
i1,i2,i3,i4,i5,j,i,l:integer;
begin
i:=1;
for i1:=1 to 5 do
for i2:=1 to 5 do
if i1<>i2 then
for i3:=1 to 5 do
if (i1<>i3)and(i2<>i3) then
for i4:=1 to 5 do
if (i1<>i4)and(i2<>i4)and(i3<>i4) then
for i5:=1 to 5 do
if (i1<>i5)and(i2<>i5)and(i3<>i5)and(i4<>i5) then
begin
k[i,1]:=i1;
k[i,2]:=i2;
k[i,3]:=i3;
k[i,4]:=i4;
k[i,5]:=i5;
inc(i);
end;
l:=0;
for i:=1 to 120 do
for j:=1 to 120 do
if (k[i,1]<>k[j,1])and(k[i,2]<>k[j,2])and(k[i,3]<>k[j,3])
and(k[i,4]<>k[j,4])and(k[i,5]<>k[j,5]) then
begin
for i1:=1 to 5 do
write(k[i,i1]:2);
write(' ');
for i1:=1 to 5 do
write(k[j,i1]:2);
writeln;
inc(l);
end;
write(l);
end.
我来回复