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;
}