随便代入三个数来计算,相同则YES,否则NO 还有就是OJ不能有<ctime>头文件,否则RT #include <cstdio> #include <cctype> #include <cstdlib> #include <ctime> using namespace std; const int MAX = 200; int value[MAX]; int grade[MAX]; char leftinput[MAX],rightinput[MAX]; char leftpostorder[MAX],rightpostorder[MAX]; void change( char * mid , char * out ) { char stack[MAX]; int stacki = 0 ; int n = 0 ; for( int i = 0 ; mid[i] != '/0' ; ++i ) if( mid[i] == ' ' || mid[i] == '/t') { continue; } else if( mid[i] == '(') { stack[ stacki++ ] = mid[i]; } else if( mid[i] == ')' ) { while( stack[ stacki - 1 ] != '(' ) out[n++] = stack[--stacki]; --stacki; } else if( isalpha( mid[i] ) || isdigit( mid[i] ) ) { out[n++] = mid[i]; } else { while( stacki != 0 && stack[ stacki - 1 ] != '(' && grade[ stack[ stacki - 1 ] ] >= grade[ mid[i] ] ) out[n++] = stack[ --stacki ]; stack[stacki++] = mid[i]; } while( stacki != 0 ) out[n++] = stack[--stacki]; out[n] = '/0'; } int calresult( char* mid ) { int stack[MAX]; int stacki = 0 ; for( int i = 0 ; mid[i] != '/0' ; ++i ) if( isdigit( mid[i] )) stack[ stacki++ ] = mid[i] - '0'; else if( isalpha( mid[i] ) ) stack[ stacki++ ] = value[ tolower( mid[i] ) ]; else if( mid[i] == '+') { --stacki; stack[stacki-1] = stack[stacki-1] + stack[stacki]; } else if( mid[i] == '-' ) { --stacki; stack[stacki-1] = stack[stacki-1] - stack[stacki]; } else { --stacki; stack[stacki-1] = stack[stacki-1] * stack[stacki]; } return stack[ 0 ]; } int main() { int n,i; srand( time(0)); grade['+'] = grade['-'] = 0; grade['*'] = 1; scanf("%d",&n); int c = getchar(); while(n--) { gets( leftinput ); gets( rightinput ); change( leftinput , leftpostorder ); change( rightinput , rightpostorder ); for( i = 0 ; i != 3 ; ++i ) { for( int i = 'a' ; i <= 'z' ; ++i ) value[i] = rand() %10; if( calresult( leftpostorder ) != calresult( rightpostorder) ) break; } if( i == 3 ) printf("YES/n"); else printf("NO/n"); } return 0; }