我有一道排序题,恳请各位高手帮忙解决,不胜感激!
大家都知道排列组合的一个公式C m n ,它等于m的阶乘除以n的阶乘和(m-n)的阶乘,这个结果等于m个事物中取出n个事物的所有取法数目总和。我现在想打印出每种取法,怎么做?
具体一个例子,如有abcdef 共6个位置,我拿2个苹果放在这六个中的其中2个位置上,请编程打印出这2个苹果的放法?
更进一步,编程求出C17 +C26 +C35 的每一种排列方式
例, C17 的排列方法输出为7种,编程后输出结果为1000000,0100000,0010000,0001000,0000100,0000010,0000001.
C26的排列方法有15种,编程后输出结果为
110000,011000,001100,000110,000011;101000,100100,100010,100001;010100,010010,010001;001010,001001;000101;
同理,编程输出C35的10种排列方法.
这样得出公式C17 +C26 +C35 的32种排列方法的输出结果.
当然,用0、1表示或其他字符表示均可,主要是排列方法的输出。
进而推算出通式的编程。。依次类推C19 +C28+C37+C46,C111+C210+C39+C48+C57等都能求出。
基本公式是C12n-1+C22n-2+C32n-3+……+C n-1 n+1
重申:本题不是求排列的总和,即上式的总和,而是打印输出各种排列方法.
附件里是此题祥析,拜托各位大侠了!谢谢谢谢!!!!
----------------解决方案--------------------------------------------------------
#include"stdio.h"
#include "conio.h"
#include "stdlib.h"
#define MAX_SIZE 20
void printset(int n,int k);
int main(void)
{
int n,i;
puts("input a number:");
scanf("%d",&n);
for(i=1;i<n;printset(2*n-i,i),i++);
getch();
return 0;
}
void printset(int n,int k)
{
int set[MAX_SIZE];
int i,pos=k-1;
int *info=NULL;
if((info=(int *)malloc(sizeof(int)*n))==NULL) exit(1);
for(i=0;i<n;info[i]=0,i++);
for(i=0;i<k;set[i]=i,info[set[i]]=1,i++);
for(i=0;i<n;printf("%d",info[i]),i++);
printf("\n");
while(1)
{
set[k-1]==n-1?(pos--):(pos=k-1);
set[pos]++;
for(i=pos+1;i<k;set[i]=set[i-1]+1,i++);
for(i=0;i<n;info[i]=0,i++);
for(i=0;i<k;info[set[i]]=1,i++);
for(i=0;i<n;printf("%d",info[i]),i++);
printf("\n");
if(set[0]>=n-k) break;
}
free(info);
}
[此贴子已经被作者于2006-8-26 16:02:20编辑过]
----------------解决方案--------------------------------------------------------
花了半个小时替您写,100个金币也算是很便宜了。
----------------解决方案--------------------------------------------------------
饿,您买不起啊
那算了,以后您记得还我100金币
----------------解决方案--------------------------------------------------------
俄没有金币,,不过俄也很礼貌,送你一束花吧,谢谢,我回头好好研究你的大作!!
----------------解决方案--------------------------------------------------------
没事,您以后记得还就行.
您再测试下程序有无问题吧。
程序是输入一个n值,打印出C12n-1+C22n-2+C32n-3+……+C n-1 n+1的排列方式.
----------------解决方案--------------------------------------------------------