XHAENEUNG..오답질문입니다..(C++)

  • User Avatar
    catniz

    [[problem:XHAENEUNG]]

    코드 설명입니다.
    먼저 A와 B를 숫자로 변환하고 result에 A와 B를 연산한 결과를 result에 넣습니다. 범위밖의 예외처리를 하고, C를 확인합니다.

    alpanum[11][26] 에서 11은 0부터 10까지를 의미하고, 26은 알파벳의 개수입니다. 0부터 10까지 각각의 알파벳 개수를 저장합니다.
    cAlpa[26]은 c가 가진 알파벳의 개수입니다.

    same[11]은 0부터 10중 c와 같은 알파벳 개수를 가진 수가 true가 되고 나머지는 false입니다. 코드 거의 마지막에 각 숫자의 알파벳 개수와 비교하면서 개수가 하나라도 틀릴경우 그 수는 false가 됩니다.

    여기서 작은 a,b,c는 string이고,
    큰 A,B,C는 a,b,c를 숫자로 변환한 값입니다.

    마지막에 C와 result를 비교해서 맞다면 Yes를 출력합니다.

    으.. 여기까지에요.. 더 설명해야 할 게 있는지 모르겠어요..

    코드

    ~~~ c++
    #include
    #include
    #include

    using namespace std;

    int main() {
    int TC;
    char a[6], b[6], c[15], oper[2];
    cin >> TC;
    int alpanum[11][26] = { 0, };
    char *num[11] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
    int A, B, C, result;

    alpanum[0]['z' - 'a'] = 1;
    alpanum[0]['e' - 'a'] = 1;
    alpanum[0]['r' - 'a'] = 1;
    alpanum[0]['o' - 'a'] = 1;
    
    alpanum[1]['o' - 'a'] = 1;
    alpanum[1]['n' - 'a'] = 1;
    alpanum[1]['e' - 'a'] = 1;
    
    alpanum[2]['t' - 'a'] = 1;
    alpanum[2]['w' - 'a'] = 1;
    alpanum[2]['o' - 'a'] = 1;
    
    alpanum[3]['t' - 'a'] = 1;
    alpanum[3]['h' - 'a'] = 1;
    alpanum[3]['r' - 'a'] = 1;
    alpanum[3]['e' - 'a'] = 2;
    
    alpanum[4]['f' - 'a'] = 1;
    alpanum[4]['o' - 'a'] = 1;
    alpanum[4]['u' - 'a'] = 1;
    alpanum[4]['r' - 'a'] = 1;
    
    alpanum[5]['f' - 'a'] = 1;
    alpanum[5]['i' - 'a'] = 1;
    alpanum[5]['v' - 'a'] = 1;
    alpanum[5]['e' - 'a'] = 1;
    
    alpanum[6]['s' - 'a'] = 1;
    alpanum[6]['i' - 'a'] = 1;
    alpanum[6]['x' - 'a'] = 1;
    
    alpanum[7]['s' - 'a'] = 1;
    alpanum[7]['e' - 'a'] = 2;
    alpanum[7]['v' - 'a'] = 1;
    alpanum[7]['n' - 'a'] = 1;
    
    alpanum[8]['e' - 'a'] = 1;
    alpanum[8]['i' - 'a'] = 1;
    alpanum[8]['g' - 'a'] = 1;
    alpanum[8]['h' - 'a'] = 1;
    alpanum[8]['t' - 'a'] = 1;
    
    alpanum[9]['n' - 'a'] = 2;
    alpanum[9]['i' - 'a'] = 1;
    alpanum[9]['e' - 'a'] = 1;
    
    alpanum[10]['t' - 'a'] = 1;
    alpanum[10]['e' - 'a'] = 1;
    alpanum[10]['n' - 'a'] = 1;
    
    while (TC--) {
        bool same[11] = { true, true, true, true, true, true, true, true, true, true, true };
    
        scanf("%s", a);
        cin >> oper[0];
        scanf("%s", b);
        cin >> oper[1];
        scanf("%s", c);
    
        for (int i = 0; i < 11; i++) {
            if (strcmp(num[i], a) == 0)
                A = i;
            if (strcmp(num[i], b) == 0)
                B = i;
        }
    
        switch (oper[0]) {
        case '+': result = A + B; break;
        case '-': result = A - B; break;
        case '*': result = A * B; break;
        }
        if ((result < 0) || (result > 10)) {
            cout << "No" << endl;
            continue;
        }
    
        int cSize = strlen(c);
        if (cSize > 5) {
            cout << "No" << endl;
            continue;
        }
        int cAlpa[26] = { 0, };
        for (int i = 0; i < cSize; i++)
            cAlpa[c[i] - 'a']++;
    
        for (int i = 0; i < 11; i++) {
            for (int k = 0; k < 26; k++) {
                if (cAlpa[k] != alpanum[i][k]) {
                    same[i] = false;
                    break;
                }
            }
        }
        for (int i = 0; i < 11; i++) {
            if (same[i]) {
                C = i;
                break;
            }
        }
        if (C == result)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
    
    return 0;
    

    }
    ~~~


    12년 전
2개의 댓글이 있습니다.
  • User Avatar
    Kureyo

    C에 대한 초기화가 없는게 문제가 될거같네요


    12년 전 link
  • User Avatar
    catniz

    아 헐!
    감사합니다 !!


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