XHAENEUNG 문제 도움요청합니다

  • sjc1117
    sjc1117

    제가 예제를 넣어서 해보면 답이 잘나오는데 채점하면 오답이 뜹니다.

    답과 글자의 순서 관계없이 각 알파벳만 다 들어가있으면 정답으로 처리하는 것이지 않습니까?
    제가 잘못알고있는건가요

    #include <stdio.h>
    #include <string.h>
    
    int StringToInt(char *tmp){
        if(!strcmp(tmp, "zero")) return 0;
        else if(!strcmp(tmp, "one")) return 1;
        else if(!strcmp(tmp, "two")) return 2;
        else if(!strcmp(tmp, "three")) return 3;
        else if(!strcmp(tmp, "four")) return 4;
        else if(!strcmp(tmp, "five")) return 5;
        else if(!strcmp(tmp, "six")) return 6;
        else if(!strcmp(tmp, "seven")) return 7;
        else if(!strcmp(tmp, "eight")) return 8;
        else if(!strcmp(tmp, "nine")) return 9;
        else if(!strcmp(tmp, "ten")) return 10;
    }
    
    char* IntToString(int tmp)
    {
        char num[6];
    
        if(tmp == 0) sprintf(num, "zero");
        else if(tmp == 1) sprintf(num, "one");
        else if(tmp == 2) sprintf(num, "two");
        else if(tmp == 3) sprintf(num, "three");
        else if(tmp == 4) sprintf(num, "four");
        else if(tmp == 5) sprintf(num, "five");
        else if(tmp == 6) sprintf(num, "six");
        else if(tmp == 7) sprintf(num, "seven");
        else if(tmp == 8) sprintf(num, "eight");
        else if(tmp == 9) sprintf(num, "nine");
        else if(tmp == 10) sprintf(num, "ten");
    
        return num;
    
    }
    
    char* sorting(char* tmp){
        int len = strlen(tmp);
        for(int i=0; i<len-1; i++){
            for(int j=i+1; j<len; j++){
                if(tmp[i]>tmp[j]){
                    char swap;
                    swap = tmp[i]; tmp[i] = tmp[j]; tmp[j] = swap;
                }
            }
        }
    
        return tmp;
    }
    
    char* calculate(char* num1, char* num2, char oper, char* answer){
        int n1 = StringToInt(num1);
        int n2 = StringToInt(num2);
        int result;
        char stresult[6];
        char check[4];
    
        switch(oper){
        case '+': result = n1 + n2; 
            break;
        case '-': result = n1 - n2; 
            break;
        case '*': result = n1 * n2; 
            break;
        case '/': result = n1 / n2; 
            break;
        }
    
        strcpy(stresult, IntToString(result));
        sorting(stresult);
        sorting(answer);
    
        if(result < 0 || result>10) strcpy(check, "No");
        else if(!strcmp(stresult, answer)) strcpy(check, "Yes");
        else strcpy(check, "No");
    
        return check;
    }
    
    int main()
    {
        int input;
        char check[1000][4];
    
        scanf("%d", &input);
    
        for(int i=0; i<input; i++){
            char num1[6], num2[6], answer[11], oper;
    
            scanf("%s %c %s = %s", num1, &oper, num2, answer);
            strcpy(check[i], calculate(num1, num2, oper, answer));
        }
    
        for(int i=0; i<input; i++){
            printf("%s\n", check[i]);
        }
    }
    

    10년 전
5개의 댓글이 있습니다.
  • kriii
    kriii

    그냥 좀더 기초적인 수준에서의 공부가 더 필요하신것 같습니다.

    지역변수의 포인터를 리턴하다뇨?


    10년 전 link
  • kriii
    kriii

    원하신대로 하려고 했다면 아래와 같이 하셨어야합니다.

    #include <stdio.h>
    #include <string.h>
    
    int StringToInt(char *tmp){
        if(!strcmp(tmp, "zero")) return 0;
        else if(!strcmp(tmp, "one")) return 1;
        else if(!strcmp(tmp, "two")) return 2;
        else if(!strcmp(tmp, "three")) return 3;
        else if(!strcmp(tmp, "four")) return 4;
        else if(!strcmp(tmp, "five")) return 5;
        else if(!strcmp(tmp, "six")) return 6;
        else if(!strcmp(tmp, "seven")) return 7;
        else if(!strcmp(tmp, "eight")) return 8;
        else if(!strcmp(tmp, "nine")) return 9;
        else if(!strcmp(tmp, "ten")) return 10;
        return -1;
    }
    
    void IntToString(char* num, int tmp){
        if(tmp == 0) sprintf(num, "zero");
        else if(tmp == 1) sprintf(num, "one");
        else if(tmp == 2) sprintf(num, "two");
        else if(tmp == 3) sprintf(num, "three");
        else if(tmp == 4) sprintf(num, "four");
        else if(tmp == 5) sprintf(num, "five");
        else if(tmp == 6) sprintf(num, "six");
        else if(tmp == 7) sprintf(num, "seven");
        else if(tmp == 8) sprintf(num, "eight");
        else if(tmp == 9) sprintf(num, "nine");
        else if(tmp == 10) sprintf(num, "ten");
    }
    
    void sorting(char* tmp){
        int len = strlen(tmp);
        for(int i=0; i<len-1; i++){
            for(int j=i+1; j<len; j++){
                if(tmp[i]>tmp[j]){
                    char swap;
                    swap = tmp[i]; tmp[i] = tmp[j]; tmp[j] = swap;
                }
            }
        }
    }
    
    void calculate(char *check, char* num1, char* num2, char oper, char* answer){
        int n1 = StringToInt(num1);
        int n2 = StringToInt(num2);
        int result;
        char stresult[6];
    
        switch(oper){
        case '+': result = n1 + n2; 
            break;
        case '-': result = n1 - n2; 
            break;
        case '*': result = n1 * n2; 
            break;
        case '/': result = n1 / n2; 
            break;
        }
    
        IntToString(stresult,result);
        sorting(stresult);
        sorting(answer);
    
        if(result < 0 || result>10) strcpy(check, "No");
        else if(!strcmp(stresult, answer)) strcpy(check, "Yes");
        else strcpy(check, "No");
    }
    
    int main()
    {
        int input;
        char check[1000][4];
    
        scanf("%d", &input);
    
        for(int i=0; i<input; i++){
            char num1[6], num2[6], answer[11], oper;
    
            scanf("%s %c %s = %s", num1, &oper, num2, answer);
            calculate(check[i], num1, num2, oper, answer);
        }
    
        for(int i=0; i<input; i++){
            printf("%s\n", check[i]);
        }
    
        return 0;
    }
    

    10년 전 link
  • sjc1117
    sjc1117

    굳 감사합니다.
    말씀듣고 고치니 바로되네요
    제가 기초가 부족했습니다
    복많이 받으세요


    10년 전 link
  • sjc1117
    sjc1117

    ###감사합니다

    printf("Thank you");
    

    10년 전 link
  • sjc1117
    sjc1117

    ###우와
    ##댓글도 되네요

    이히히히

    *가나다라마바사


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.