XHAENEUNG..오답질문입니다..(C++) catniz 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를 출력합니다. 으.. 여기까지에요.. 더 설명해야 할 게 있는지 모르겠어요.. 코드 #include <iostream> #include <stdio.h> #include <cstring> 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; } 10년 전
2개의 댓글이 있습니다. Kureyo C에 대한 초기화가 없는게 문제가 될거같네요 10년 전 link catniz 아 헐! 감사합니다 !! 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
catniz
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를 출력합니다.
으.. 여기까지에요.. 더 설명해야 할 게 있는지 모르겠어요..
코드
10년 전