2013-02-22 5 views
3

세트의 powerset을 생성하려고하는데이 코드를 작성했습니다. 문제는 사용자가 두 세트의 유사한 구성원을 입력하면 올바르게 작동하지 않는다는 것입니다. 내가 무엇을 할 수 있을지? 여기 내 코드입니다 :powerset 코드 작성 문제

#include <iostream> 
#include <string.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
using namespace std; 

char obtain(char *p,int n) 
{ 
    int i; 
    for(i=0;i<n;i++) 
    { 
     cout<<"enter member"<<(i+1)<<"\n"; 
     cin>>*(p+i); 
    } 
    return *p; 
} 

void set_display(char *p,int n) 
{ 
    cout<<"{"; 
    for(int i=0;i<n;i++) 
    { 
     cout<<*(p+i)<<","; 
    } 
    cout<<"}"; 
} 

void powset(char *p,int n) 
{ 
    unsigned int m = (double)pow((double)2, n); 
    int i, j; 
    for(i = 0; i < m; i++) 
    { 
     cout<<"{"; 
     for(j = 0; j < n; j++) 
     { 
      if(i& (1<<j)) 
       cout<<*(p+j); 
     } 
     cout<<"}\n"; 
    } 
} 
+1

나는 이것이 C#과 어떤 관계가 있는지 확신하지 못하기 때문에 C# 태그를 제거했습니다. – Freeman

+0

C 또는 C#에서 정의되지 않은'cout'을 사용할 때 C 언어 태그가 사용되는 이유는 무엇입니까? –

+2

디버거를 사용할 때 오류가 발생한 행은 무엇입니까? –

답변

0

좋아, 난 당신이 누락 코드를 디버깅 할 수 있습니다. 하지만 당신이 질문을 올린 이후로 나는 순수한 코드 C을 작성했습니다. 도움이 될 수 있습니다.

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<math.h> 
int main(int argc, char* argv[]){ 
    int N; 
    char y[20]={0}; 
    int i,j; 
    y[0] = 'a'; 
    y[1] = 'b'; 
    y[2] = 'c'; 
    N = 3; 
    int powerSet; 
    powerSet=pow(2,N); 
    for(i = 0; i<(powerSet);i++){ 
     for(j=0;j<N;j++){ 
      if((i & (1<<j))){ 
       printf("%c ",y[j]); 
      } 
     } 
     printf("\n"); 
    }   
    printf("\n"); 
    return EXIT_SUCCESS; 
} 

그리고 그 작업 :

:~$ gcc x.c -lm -Wall 
:~$ ./a.out 

a 
b 
a b 
c 
a c 
b c 
a b c 

[답변]

당신 오류의 경우 :이 개 기호는 동일합니다.

y[0] = 'a'; 
y[1] = 'a'; 
y[2] = 'c'; 

:~$ ./a.out 

a 
a 
a a 
c 
a c 
a c 
a a c 

그러나 이것은 설정 이론에 따라 틀립니다. 집합에 이 있으므로 두 번 같은 요소를 사용할 수 없습니다 (onec 이상). 그러나 입력이 잘못되었습니다 : (a, a, c)은 (는) 세트가 아닙니다. 따라서 코드를 사용할 수 있습니다.

+0

헤더 파일에'.h' 확장자가 포함되어 있기 때문에'C '로 작성했습니다. –

+0

그것도'Y []' –

+1

에 두 개의 유사한 문자를 입력하면 작동합니다. 내 코드도 제대로 작동하므로 dosent에 오류가 있습니다. –