delphi 口袋中有红、黄、蓝、白、黑5种颜色的球若干,每次取3个球,编写程序求得到三种不同颜色球的取法

 我来答
gcbjoy
推荐于2016-11-22 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:92%
帮助的人:2730万
展开全部
递归求组合:
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.

红黄蓝
红黄白
红黄黑
红蓝白
红蓝黑
红白黑
黄蓝白
黄蓝黑
黄白黑
蓝白黑
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式