
delphi 口袋中有红、黄、蓝、白、黑5种颜色的球若干,每次取3个球,编写程序求得到三种不同颜色球的取法
1个回答
展开全部
递归求组合:
const n=5;
s0='红黄兰白黑';
type
charray=array[1..n] of string[2];
boolarray=array[1..n] of boolean;
var
s,ss:string;
ch:charray;
t:boolarray;
i,m,num:integer;
procedure next(t:boolarray;ss:string;m:integer;var num:integer);
var
i:integer;
begin
if m=0 then begin writeln(ss); inc(num); end
else
for i:=1 to n do
if t[i] then begin
t[i]:=false;
next(t,ss+ch[i],m-1,num);
end;
end;
begin
s:=copy(s0,1,length(s0));
for i:=1 to n do begin ch[i]:=copy(s,2*i-1,2); t[i]:=true; end;
ss:='';
m:=3;
next(t,ss,m,num);
writeln;
writeln(num);
end.
更多追问追答
追问
这个可以用枚举做么???
追答
当然可以,只是计算量大很多 !
var
a:array[1..5] of byte;
b:array[1..5] of string[2];
c:array[1..500] of byte;
i,j,k,m,n,t:integer;
begin
a[1]:=1; a[2]:=2; a[3]:=4; a[4]:=8; a[5]:=16;
b[1]:='红'; b[2]:='黄'; b[3]:='蓝'; b[4]:='白'; b[5]:='黑';
m:=0;
for i:=1 to 5 do for j:=1 to 5 do for k:=1 to 5 do
if (j<>i)and(k<>i)and(k<>j) then begin
inc(m);
c[m]:=a[i]+a[j]+a[k];
t:=0;
for n:=1 to m-1 do if c[m]=c[n] then inc(t);
if t=0 then writeln(b[i]:2,b[j]:2,b[k]:2);
end;
end.
红黄蓝
红黄白
红黄黑
红蓝白
红蓝黑
红白黑
黄蓝白
黄蓝黑
黄白黑
蓝白黑
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询