6人排成一排,abc不相邻,de也不相邻,有多少种排法?

有 120 种排法。


分步骤讨论如下:

一、先将 abc 进行排列

3! = 6 种情形;以 y 表示占位,x 表示待选,xyxyxyx;为确保 abc 不相邻,中间 2 个位置必须选;

二、插入 edf ,分两种情况

第一种,edf 都分开
在 4 个空位置选择 3 个,中间 2 个必须选,因此只有 2 种选法,一共有 2×3! = 12 种情形;即,6×12 = 72 种方案;
第二种,ef 或 df 合并插入
只能选中间 2 个必选位置,de 分开插入,有 2 种排列,f 有 2 种选择,f 与合并的 d 或 e 位置交换有 2 种选择,即 2×2×2 = 8 种情形;一共有 6×8 = 48 种方案;

三、合计

有 72+48 = 120 种排列方案。


当然,也可以用编程枚举来求解,当作是验证。

fortran 代码
! fortran
character*6 h 
character*2 s(8)
data h/'a'/,m/0/
data s/'ab','ba','bc','cb','ca','ac','de','ed'/

do 
  
  call kind(h)
  if(h.eq.' ') exit 
  
  if(sum(index(h,s)).gt.0) cycle 
  m=m+1; write(*,'(2a$)') h,', '
  if(mod(m,6).eq.0) write(*,*)

end do 

write(*,'(ag0)') 'total = ',m 

end


subroutine kind(h)

character h*(*)
character ch
save
data n/0/

if(n.eq.0) then

  n=len(h)
  i1=ichar(h(1:1))
  
  do i=2,n
    h(i:i)=char(i1+i-1)
  end do
  
  if(n+i1.gt.255) then
    h=' '
    n=0
  end if
  
  return

end if

do i=n-1,1,-1
   if(h(i:i).lt.h(i+1:i+1)) exit
end do

if(i.lt.1) then
  h=' '
  n=0
  return
end if

do j=i+1,(n+i)/2
  ch=h(j:j)
  h(j:j)=h(n-j+i+1:n-j+i+1)
  h(n-j+i+1:n-j+i+1)=ch
end do; ch=h(i:i)

do j=i+1,n
  if(h(j:j).gt.ch) exit
end do

h(i:i)=h(j:j)
h(j:j)=ch

end

运行结果

adbecf, adbefc, adbfce, adbfec, adcebf, adcefb, 
adcfbe, adcfeb, adfbec, adfceb, aebdcf, aebdfc, 
aebfcd, aebfdc, aecdbf, aecdfb, aecfbd, aecfdb, 
aefbdc, aefcdb, afbdce, afbecd, afcdbe, afcebd, 
afdbec, afdceb, afebdc, afecdb, bdaecf, bdaefc, 
bdafce, bdafec, bdceaf, bdcefa, bdcfae, bdcfea, 
bdfaec, bdfcea, beadcf, beadfc, beafcd, beafdc, 
becdaf, becdfa, becfad, becfda, befadc, befcda, 
bfadce, bfaecd, bfcdae, bfcead, bfdaec, bfdcea, 
bfeadc, bfecda, cdaebf, cdaefb, cdafbe, cdafeb, 
cdbeaf, cdbefa, cdbfae, cdbfea, cdfaeb, cdfbea, 
ceadbf, ceadfb, ceafbd, ceafdb, cebdaf, cebdfa, 
cebfad, cebfda, cefadb, cefbda, cfadbe, cfaebd, 
cfbdae, cfbead, cfdaeb, cfdbea, cfeadb, cfebda, 
daebfc, daecfb, dafbec, dafceb, dbeafc, dbecfa, 
dbfaec, dbfcea, dceafb, dcebfa, dcfaeb, dcfbea, 
eadbfc, eadcfb, eafbdc, eafcdb, ebdafc, ebdcfa, 
ebfadc, ebfcda, ecdafb, ecdbfa, ecfadb, ecfbda, 
fadbec, fadceb, faebdc, faecdb, fbdaec, fbdcea, 
fbeadc, fbecda, fcdaeb, fcdbea, fceadb, fcebda, 
total = 120


附: fortran 代码在线编译运行的截图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值