튜토리얼 XHAENEUNG에 대해 질문드립니다. ihl 제출하면 런타임 오류가 나는데 왜 그런지 잘 모르겠어서 질문드립니다;;; 해당 문제의 댓글에 있는 예제는 모두 넣어 보았습니다. 문제는 0~10까지 연산과 답을 문자열로 주었을 때 올바른 답인지 체크하는 문제입니다. 예를들어 two + three = ivef 라고 입력이 오면 답은 five이지만, five와 같은 순서만 다른 같은 문자열도 맞게 처리되므로 Yes가 출력되는 것입니다. <a class="problem" href="/judge/problem/read/XHAENEUNG" title="째능 교육">XHAENEUNG</a> https://algospot.com/judge/problem/read/XHAENEUNG 저는 다음과 같은 과정으로 문제를 풀려 했습니다. 주어진 문자열을 공백과 =을 기준으로 잘라 저장한다. ->자르면 문자로된 숫자 3개와 연산기호가 남고 이를 저장. 잘린 문자중 앞의 2개는 문제의 숫자로, 정확한 값이다. 이를stringTonumber()함수에 의해 정수로 바꾼다. -전역으로 선언된 char* num[11]과 for문 비교 stringTonumber()함수로 바꾼 정수들을 calcString()을 계산 -계산시 10이 넘을 경우 무조건 11을 리턴 -11의 경우 getResult()를 거치지 않고 바로 "No" getResult()함수로 올바른 답과 입력된 답(마지막 문자 숫자)을 비교하여 채점한다. -입력된 답 한 글자와 올바른 답의 모든 글자를 2중 반복문으로 비교하여 같은 문자의 수가 올바른 답의 길이와 같다면 "Yes" #include<stdio.h> #include<string.h> #include <stdlib.h> char* num[] = {"zero","one","two","three","four","five","six","seven","eight","nine","ten","xxx"}; int stringTonumber(char* x) {//문자열을 데이터로 바꾸는 함수 int i,n; for (i = 0; i < 11;i++) { if (strcmp(x, num[i]) == 0) n = i; } return n; } int calcString(int x, char* op, int y) {//계산 int answer; if (strcmp(op, "+") == 0) { answer = x + y; } else if (strcmp(op, "-") == 0) { answer = x - y; } else if (strcmp(op, "*") == 0) { answer = x * y; } if (answer > 10) answer = 11; return answer; } void getResult(char* x, char* answer) {//채점 int i,j; int count=0; //int count2 = 0; int bs = 0; for (i = 0; i < strlen(answer); i++) { bs = 0; for (j = 0; j < strlen(x)&&bs==0; j++) { if (answer[i] == x[j]) { bs++; count++; } } } if (count == strlen(x)) printf("Yes\n"); else printf("No\n"); } int main() { int t; int i,j; char s[27];//문제 char * token;//잘린 토큰 char word[5][11]; char answer[11]; scanf("%d", &t); getchar(); //fflush(stdin); for (i = 0; i < t;i++) { j = 0; fgets(s,sizeof(s),stdin); s[strlen(s) - 1] = '\0'; token = strtok(s, " =");//1. 토큰으로 자르기 while (token != NULL) { strcpy(word[j], token);//자른 단어를 저장 token = strtok(NULL, " ="); j++; } strcpy(answer, num[calcString(stringTonumber(word[0]), word[1], stringTonumber(word[2]))]);//연산의 올바른 답 if (strcmp(answer, num[11]) == 0) printf("No\n"); else getResult(word[3], answer); } return 0; } 8년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
ihl
제출하면 런타임 오류가 나는데 왜 그런지 잘 모르겠어서 질문드립니다;;;
해당 문제의 댓글에 있는 예제는 모두 넣어 보았습니다.
문제는 0~10까지 연산과 답을 문자열로 주었을 때 올바른 답인지 체크하는 문제입니다. 예를들어
two + three = ivef 라고 입력이 오면
답은 five이지만, five와 같은 순서만 다른 같은 문자열도 맞게 처리되므로 Yes가 출력되는 것입니다.
https://algospot.com/judge/problem/read/XHAENEUNG
저는 다음과 같은 과정으로 문제를 풀려 했습니다.
주어진 문자열을 공백과 =을 기준으로 잘라 저장한다.
->자르면 문자로된 숫자 3개와 연산기호가 남고 이를 저장.
잘린 문자중 앞의 2개는 문제의 숫자로, 정확한 값이다. 이를stringTonumber()함수에 의해 정수로 바꾼다.
-전역으로 선언된 char* num[11]과 for문 비교
stringTonumber()함수로 바꾼 정수들을 calcString()을 계산
-계산시 10이 넘을 경우 무조건 11을 리턴
-11의 경우 getResult()를 거치지 않고 바로 "No"
getResult()함수로 올바른 답과 입력된 답(마지막 문자 숫자)을 비교하여 채점한다.
-입력된 답 한 글자와 올바른 답의 모든 글자를 2중 반복문으로 비교하여 같은 문자의 수가 올바른 답의 길이와 같다면 "Yes"
8년 전