NYOJ 32 组合数
地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=32
1 #include<stdio.h> 2 #include<string.h> 3 int n,m; 4 int ok[15];// 5 int num[15];//存放 6 int ac[15];//标记 7 void f(int l) 8 { 9 int a,b; 10 if(l==m) 11 { 12 for(a=0;a<m;a++) 13 printf("%d",num[a]); 14 printf("\n"); 15 16 } 17 else 18 { 19 if(l==0) 20 { 21 for(b=n-1;b>=m-1;b--) 22 { 23 if(ac[b]>0) 24 { 25 num[l]=ok[b]; 26 ac[b]--; 27 f(l+1); 28 ac[b]++; 29 30 } 31 } 32 } 33 else 34 { 35 for(b=n-1;b>=0;b--) 36 { 37 if(ac[b]>0) 38 { 39 if(l>=1&&ok[b]<num[l-1]) 40 { 41 num[l]=ok[b]; 42 ac[b]--; 43 f(l+1); 44 ac[b]++; 45 } 46 47 } 48 } 49 } 50 } 51 } 52 int main() 53 { 54 int a,b,k; 55 for(a=0;a<10;a++) 56 ok[a]=a+1; 57 58 while(scanf("%d%d",&n,&m)!=EOF) 59 { 60 61 for(a=0;a<=n;a++) 62 ac[a]=1; 63 memset(num,0,sizeof(num)); 64 f(0); 65 } 66 }