#include "stdafx.h" #include <string.h> #include <stdio.h> #define MAX 100 int nCount = 0; void Perm(char s[],int index[],int count,int currentCount); void Combination(char s[],int index[],int count,int currentCount,int currentIndex,int nStep,int nlayer); int main() { int index[MAX] = {0}; char s[]="1234567"; int i; for (i=0;i<MAX;++i) { index[i] = -1; } // Perm(s, index, strlen(s),0); for (i=0;i<strlen(s);++i) { Combination(s,index,strlen(s),0,0,i+1,0); } printf("%d\n",nCount); return 0; } void Combination(char s[],int index[],int count,int currentCount,int currentIndex,int nStep,int nlayer) { int i = 0; int j = 0; int tmp = 0; if (nStep==nlayer) { for (i=0;i<currentCount;++i) { printf("%c",s[index[i]]); } printf("\n"); nCount++; return; } for (i = currentIndex;i<=count+currentCount-(nStep-nlayer);++i) { index[currentCount++] = i; count--; Combination(s,index,count,currentCount,i+1,nStep,nlayer+1); currentCount--; count++; } } void Perm(char s[],int index[],int count,int currentCount) { int i = 0; int j = 0; int tmp = 0; if (count==0) { for (i=0;i<currentCount;++i) { printf("%c",s[index[i]]); } printf("\n"); nCount++; return; } for (i=0;i<(count+currentCount);++i) { for (j=0;j<currentCount;++j) { if (i==index[j]) { ++i; j=-1; } } if (i==(count+currentCount)) { break; } if (j==currentCount) { index[currentCount++] = i; count--; Perm(s, index, count,currentCount); --currentCount; ++count; } } }