편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2020.09.11

    c언어로 부분집합을 모두 구현하는 함수를 만들던 도중에 다음과 같은 일이 벌어졌습니다.


    C언어를 공부 중인 학생입니다.

    C언어를 이용해서 부분집합을 전부 출력하는 프로그램을 만들던 도중에 곤란함을 겪고 있어서 다음과 같이 질문을 드리러 왔습니다.

    제가 원하던 결과값은 다음과 같습니다.

    A집합을 입력하세요:afz
    0:
    1:a f z
    2:af az fz
    3:afz
    

    이런 식으로 말이죠. 하지만 제가 만든 코드대로 하면은

    A집합을 입력하세요:afz
    0:
    1:  a  f     z
    2:       af      az   fz
    3:                  afz
    

    이런식으로 공백이 너무 과도하게 많이 나옵니다. 아무래도 for문을 돌리면서 공백을 계속해서 생성하게 만들어서 일어난 일인 것 같은데 문제는 어떤 식으로 제어를 해야 제가 원하는 예상값처럼 깔끔하게 나올 수 있는지를 모르겠습니다. 그래서 이렇게 질문을 드립니다. 어떻게 수정을 해야 제가 원하는대로 깔끔하게 나올까요?

    #include <stdio.h> 
    #include <string.h>
    #include <math.h> 
    #define MAX 1000
    
    char ary[MAX] = {0};
    
    unsigned int countSetBits(unsigned int n)
    {
        unsigned int count = 0;
        while (n) {
            count += n & 1;
            n >>= 1;
        } 
        return count;
    }
    
    void printPowerSet(char *set, int set_size)
    {
        unsigned int pow_set_size = pow(2, set_size);
        int counter, j, k;
    
        for(counter = 0; counter <= set_size; counter++)
        {
            printf("%d:", counter);
    
            for(j = 0; j < pow_set_size; j++)
            {
                for(k = 0; k < set_size; k++)
                {
                    if(j & (1<<k))
                    {
                        if(countSetBits(j<<k) == counter)
                        {
                            printf("%c", set[k]);
                        }
                    }
                }printf(" ");
            }printf("\n");
        }
    }
    int main() 
    { 
        printf("A집합을 입력하시오:");
        scanf("%s", ary);
        printPowerSet(ary, strlen(ary));
        return 0; 
    } 
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.09.10

    c언어로 부분집합을 모두 구현하는 함수를 만들던 도중에 다음과 같은 일이 벌어졌습니다.


    C언어를 공부 중인 학생입니다.

    C언어를 이용해서 부분집합을 전부 출력하는 프로그램을 만들던 도중에 곤란함을 겪고 있어서 다음과 같이 질문을 드리러 왔습니다.

    제가 원하던 결과값은 다음과 같습니다.

    A집합을 입력하세요:afz

    0:

    1:a f z

    2:af az fz

    3:afz

    이런 식으로 말이죠. 하지만 제가 만든 코드대로 하면은

    A집합을 입력하세요:afz

    0:

    1: a  f     z

    2:      af      az   fz

    3:                  afz

    이런식으로 공백이 너무 과도하게 많이 나옵니다. 아무래도 for문을 돌리면서 공백을 계속해서 생성하게 만들어서 일어난 일인 것 같은데 문제는 어떤 식으로 제어를 해야 제가 원하는 예상값처럼 깔끔하게 나올 수 있는지를 모르겠습니다. 그래서 이렇게 질문을 드립니다. 어떻게 수정을 해야 제가 원하는대로 깔끔하게 나올까요?

    #include <stdio.h> 
    #include <string.h>
    #include <math.h> 
    #define MAX 1000
    
    char ary[MAX] = {0};
    
    unsigned int countSetBits(unsigned int n)
    {
        unsigned int count = 0;
        while (n) {
            count += n & 1;
            n >>= 1;
        } 
        return count;
    }
    
    void printPowerSet(char *set, int set_size)
    {
        unsigned int pow_set_size = pow(2, set_size);
        int counter, j, k;
    
        for(counter = 0; counter <= set_size; counter++)
        {
            printf("%d:", counter);
    
            for(j = 0; j < pow_set_size; j++)
            {
                for(k = 0; k < set_size; k++)
                {
                    if(j & (1<<k))
                    {
                        if(countSetBits(j<<k) == counter)
                        {
                            printf("%c", set[k]);
                        }
                    }
                }printf(" ");
            }printf("\n");
        }
    }
    int main() 
    { 
        printf("A집합을 입력하시오:");
        scanf("%s", ary);
        printPowerSet(ary, strlen(ary));
        return 0; 
    }