level 6
书架上有21本书,编号从1到21从中选4本,其中每两本的编号都不相邻的选法一共有多少种?
2009年10月16日 01点10分
1
level 0
C(18, 4)
还剩17本,相当于在18个空档中插入4本书,书不能占据同一位置
2009年10月16日 01点10分
2
level 0
C(18, 4) = 3060
以上构造能保证不会相邻
2009年10月16日 02点10分
4
level 0
贴个算法让机器代劳吧!
main() /*c(n,r)*/
{int a[30],i,j,n=21,r=4,sum=0;
for (j=1;j<=r;j++)a[j]=j;
for (j=1;j<=r;j++)printf("%2d ",a[j]);printf("\n");
do
{i=0;
for (j=1;j<=r;j++)if(a[j]<n-r+j&&j>i)i=j;
if (i>0){a[i]=a[i]+1;for (j=i+1;j<=r;j++)a[j]=a[j-1]+1;
if(a[1]+1<a[2]&&a[2]+1<a[3]&&a[3]+1<a[4]){for (j=1;j<=r;j++)
printf("%2d ",a[j]);printf("\n");sum++;}}}
while(i>0);
printf("c(%d,%d)=%d",n,r,sum);
}
3060正确
4楼的构造法得到验证
2009年11月29日 14点11分
5