PICNIC 문제 질문드립니다. 고수님들 도와주세요. doubleknd 계속 런타임 오류 RTE(nonzero return code) 가 발생하는데 원인을 잘 모르겠습니다ㅜㅜ 혹시 exit(1) 이 부분이 걸리는건가요 ?ㅜ 답변 주시면 감사하겠습니다. #include <stdio.h> #include <string.h> #include <stdlib.h> void set_friends (int [][10], int, int); int count_parings(int [][10], int [], int); int main() { int i=0, j=0; int n=0, m=0; //n은 학생 수, m 은 짝의 수 입니다. int test_case=0; int result=0; int taken[10] = {0,}; int are_friends[10][10] = {0,}; char gar=0; scanf ("%d", &test_case); if ( test_case<0 || test_case >50) { printf ("Error: 0<Testcase<= 50\n"); exit(0); } while (test_case>0) { // initialization. for (i=0 ; i<10 ; i++) { taken[i] = 0; for (j=0 ; j<10 ; j++) { are_friends[i][j] = 0; } } scanf ("%d %d",&n, &m); // check boudary of n if (n<2 || n>10) { printf ("Error: 2<=N<=10\n"); exit(1); } else if (n%2) { printf ("Error : The number of student must be even number.\n"); exit(1); } // check boundary of m if ( m<0 || m>(n*(n-1))/2 ) { printf ("Error: 0<=M<=n(n-1)/2\n"); exit(1); } // if m = 0 if (m==0) { printf ("\n"); test_case--; continue; } scanf ("%c",&gar); // garbage. set_friends(are_friends, n, m); result = count_parings(are_friends, taken, n); printf ("%d\n",result); test_case--; } printf ("Program Exit.\n"); return 0; } // 짝을 입력받는 함수입니다. void set_friends (int are_friends[][10], int n, int m) { int i=0; int num=0, len=0; int x=-1, y=-1; char temp[81]={0,}; fgets(temp, sizeof(temp), stdin); temp[strlen(temp)-1] = '\0'; len = (int)strlen(temp); for (i=0 ; i<len ; i++) { if ( temp[i]!=' ' ) { num = temp[i]-'0'; if ( num<0 || num>n-1) { printf (" 0<= Student number <= n-1.\n"); exit(1); } if (x==-1) { x = num; } else { y = num; are_friends[x][y] = 1; are_friends[y][x] = 1; x = y = -1; } } } } int count_parings(int are_friends[][10], int taken[], int n) { int ret=0, pair_with=0; int first_free = -1; for (int i=0 ; i<n ; i++) { if (!taken[i]) { first_free = i; break; } } if (first_free == -1) { return 1; } for (pair_with = first_free+1 ; pair_with<n ; pair_with++) { if ( !taken[pair_with] && are_friends[first_free][pair_with] ) { taken[first_free] = taken[pair_with] = 1; ret += count_parings(are_friends, taken, n); taken[first_free] = taken[pair_with] = 0; } } return ret; } 11년 전
5개의 댓글이 있습니다. kcm1700 fgets가 한 줄을 온전히 다 받지 않고 있네요. 80자로 하신 이유가 있나요? 11년 전 link doubleknd 굳이 이유를 말씀드리자면 한 줄이 80자로 알고 있어서 입니다!ㅜ fgets가 한 줄을 온전히 다 입력받지 않는다고 말씀하셨는데 제 생각엔 입력이 80자가 넘어가지 않을 것 같은데 그 부분이 어떻게 그리고 왜 문제가 되는지 알고 싶습니다!! 그리고 저 부분을 그럼 어떤 식으로 바꿔야 하나요?? 11년 전 link doubleknd scanf로 받으면 스페이스를 못받아서 fgets를 사용했습니다!ㅜ 11년 전 link kcm1700 입력은 80자를 충분히 넘을 수 있습니다. 11년 전 link kcm1700 그리고 이런 경우 ~~~ c++ scanf("%d%d",&n,&m); for (int i = 0; i < m; i++) scanf("%d%d",&a[i],&b[i]); ~~~ 와 같은 식으로 작성하여도 입력을 제대로 받을 수 있어요. 11년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
doubleknd
계속 런타임 오류 RTE(nonzero return code) 가 발생하는데
원인을 잘 모르겠습니다ㅜㅜ
혹시 exit(1) 이 부분이 걸리는건가요 ?ㅜ
답변 주시면 감사하겠습니다.
11년 전