限定条件的分组问题

题目:

5 个互不相同的球 ABCDE,分给 甲乙丙 3 人,每人都要分得球,AB 两球不能给同一人。
有多少种分法?

答案:

114 种分法。

分析:

不考虑有人未分到的情况

A 球的去向,甲乙丙,3 种;
B 球的去向,拿到 A 的不能再选,2 种;
CDE 三球的去向,都是 3 种;
有 3×2×3×3×3 = 162 种情况。

有人未分到的情况

甲乙丙减去一人,3 种;
A 球的去向,2 种;
B 球的去向,1 种;
CDE 三球的去向,都是 2 种;
有 3×2×1×2×2×2 = 48 种情况。

分法的总数:

有 162-48 = 114 种分法。


画蛇添足的代码

Fortran 语言,枚举算法,结果一致。


! 5 个不同的球 ABCDE,分给甲乙丙 3 人,每人都要分得球,AB 两球不能给同一人。
! 有多少种分法?

! 2023-09-11
! fortran 90

! szw_sh@163.com

integer a(5),b(3)

do i=0,3**5-1                                    ! 以5位的三进制数模拟甲乙丙

   ii=i
   b=0
   do j=5,1,-1
      k=mod(ii,3)+1
	  a(j)=k
	  b(k)=b(k)+1
	  ii=ii/3
   end do
   if(a(1).eq.a(2)) cycle                        ! AB同组的,跳过
   if(minval(b).eq.0) cycle                      ! 甲乙丙中有无球的,跳过

   m=m+1                                         ! 计数
   write(*,'(a\)') '('                           ! 输出具体分组的情况
   do j=1,3
	  do k=1,5
	     if(a(k).eq.j) write(*,'(a\)') char(64+k)
      end do
	  if(j.lt.3) write(*,'(a\)') ','
   end do
   write(*,'(a\)') '),'
   if(mod(m,6).eq.0) write(*,*)

end do

write(*,'(a,i3)') 'total = ',m                   ! 输出总数

end
   
枚举的结果:
(ACD,B,E),(AC,BD,E),(ACE,B,D),(AC,BE,D),(AC,B,DE),(AD,BC,E), 
(A,BCD,E),(AE,BC,D),(A,BCE,D),(A,BC,DE),(ADE,B,C),(AD,BE,C), 
(AD,B,CE),(AE,BD,C),(A,BDE,C),(A,BD,CE),(AE,B,CD),(A,BE,CD), 
(A,B,CDE),(ACD,E,B),(ACE,D,B),(AC,DE,B),(AC,D,BE),(AC,E,BD), 
(ADE,C,B),(AD,CE,B),(AD,C,BE),(AE,CD,B),(A,CDE,B),(A,CD,BE), 
(AE,C,BD),(A,CE,BD),(A,C,BDE),(AD,E,BC),(AE,D,BC),(A,DE,BC), 
(A,D,BCE),(A,E,BCD),(BCD,A,E),(BC,AD,E),(BCE,A,D),(BC,AE,D), 
(BC,A,DE),(BD,AC,E),(B,ACD,E),(BE,AC,D),(B,ACE,D),(B,AC,DE), 
(BDE,A,C),(BD,AE,C),(BD,A,CE),(BE,AD,C),(B,ADE,C),(B,AD,CE), 
(BE,A,CD),(B,AE,CD),(B,A,CDE),(CDE,A,B),(CD,AE,B),(CD,A,BE), 
(CE,AD,B),(C,ADE,B),(C,AD,BE),(CE,A,BD),(C,AE,BD),(C,A,BDE), 
(DE,AC,B),(D,ACE,B),(D,AC,BE),(E,ACD,B),(E,AC,BD),(DE,A,BC), 
(D,AE,BC),(D,A,BCE),(E,AD,BC),(E,A,BCD),(BCD,E,A),(BCE,D,A), 
(BC,DE,A),(BC,D,AE),(BC,E,AD),(BDE,C,A),(BD,CE,A),(BD,C,AE), 
(BE,CD,A),(B,CDE,A),(B,CD,AE),(BE,C,AD),(B,CE,AD),(B,C,ADE), 
(BD,E,AC),(BE,D,AC),(B,DE,AC),(B,D,ACE),(B,E,ACD),(CDE,B,A), 
(CD,BE,A),(CD,B,AE),(CE,BD,A),(C,BDE,A),(C,BD,AE),(CE,B,AD), 
(C,BE,AD),(C,B,ADE),(DE,BC,A),(D,BCE,A),(D,BC,AE),(E,BCD,A), 
(E,BC,AD),(DE,B,AC),(D,BE,AC),(D,B,ACE),(E,BD,AC),(E,B,ACD), 
total = 114
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值