// 원소(n)들을 (r)개씩 묶었을때 나오는 부분집합들 출력

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

void combination(char*, int, int, int, int, int*); // combination func..

int main()
{
    int i,j, number ,*array;
 //i = r  , number = n
 int c=0;//원소의 개수 = n
 int next =0;
 int nums = 0;
 char a[100] = {0};
 char *ap = a;
 char ar[21]={0};
 printf("수식[ex){a,s,d}3]을 입력하시오: ");
    gets(a);
 printf("input item number: ");
 
 for(j=0;j<100;j++)// 문자 & 숫자 걸러내기위한 부분
 {
  if((a[j]>=65&&a[j]<=90)||(a[j]>=97&&a[j]<=122))
  {
   ar[next]=a[j];
   next++;
  }
  else if((a[j]>=48&&a[j]<=57)||a[j]==0)
  {
   i=atoi(ap+j);
  break;
  }
 }
 while(1)// count 증가 부분
 {
  if(ar[c]==0)break;
  c++;}
  
 printf("%d\n",c);
 printf("%d",i);

 

    // create memory..
    array = (int*)malloc(sizeof(int)*(c+1));


        printf("\n* %d - combination >\n", i);
        combination(ar, 0, 0, i, c, array);

    printf("\n");

//    getch();
    free(array);   // free memory..
    return 0;
}

// recursive combination function..
void combination(char *ar, int now, int count, int step, int number, int* array)
{
    int i;

    *(array+count) = now;

    if (count == step)   // search r-combination ..
    {
        printf(" { %c", ar[*(array+1)-1]);   // print frist item..

        for (i = 2; i <= count; i++)
        {
            printf(", %c", ar[*(array+i)-1]);  // print other item..
        }

        printf(" } ");   // close..

        return ;
    }

    // recursive routine..
    for (i = now+1; i <= number; i++)
    {
        combination(ar, i, count+1, step, number, array);
    }
}

'프로그래밍 > C' 카테고리의 다른 글

enum을 이용한 while( true or false ) 구현 과 boolean 구현  (0) 2017.09.18
수식계산기 v0.8  (0) 2017.09.18
수식계산기 v0.5  (0) 2017.09.18

+ Recent posts