NYOJ 표현 식

표현 식 값 구하 기
시간 제한:
3000 ms  |  메모리 제한:
65535 KB
난이도:
3
묘사 하 다.
Dr. Kong 이 디자인 한 로봇 카드 는 가감 법 연산 을 많이 파악 한 후에 최근 에 간단 한 함수 구 치 를 배 웠 다. 예 를 들 어 함수 min (20, 23) 의 값 이 20 이라는 것 을 알 게 되 었 다. ,add(10,98) 의 값 은 108 등등 이다.훈련 을 통 해 Dr. Kong 이 디자인 한 로봇 카드 는 심지어 더 복잡 한 표현 식 을 계산 할 수 있다.
가설 표현 식 은 간단하게 다음 과 같이 정의 할 수 있다.
1. 십 진수 x 표현 식 입 니 다.
2. 하면, 만약, 만약... x 화해시키다 y 예. 표현 식 함수 min (x, y )표현 식 중 소수.
3. 하면, 만약, 만약... x 화해시키다 y 예. 표현 식 함수 max (x, y )표현 식 중 최대 수.
4. 만약 x 화해시키다 y 예. 표현 식 함수 add (x, y )표현 식 화합
예컨대 표현 식 max(add(1,2),7) 값 7。
주어진 표현 식 에 대한 도움말 을 작성 하 십시오. Dr.Kong 카드 의 계산 오 류 를 교정 하기 위해 정 답 을 산출 하 다.
입력
첫 번 째 줄: N 은 계산 할 표현 식 개 수 를 표시 합 니 다 (1 ≤ N ≤ 10) 
다음은 N 줄 이 있 습 니 다. 줄 마다 문자열 입 니 다. 값 을 표시 하 는 표현 식 입 니 다.
(표현 식 에 빈 칸 이 남아 있 지 않 습 니 다. 줄 당 300 자 를 넘 지 않 습 니 다. 표현 식 에 나타 난 10 진수 가 없습니다.
1000 이 넘다.)
출력
출력 은 N 줄 이 있 습 니 다. 각 줄 은 표현 식 의 값 에 대응 합 니 다.
샘플 입력
3
add(1,2) 
max(1,999) 
add(min(1,1000),add(100,99)) 

샘플 출력
3
999
200

근원
제4 회 하남성 프로 그래 밍 대회
업로드 자
장 운 총
oj 코 인 3 개 써 서 봤 어 요.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stack>
#define max(a,b) (a>b?a:b)//  max  
#define min(a,b) (a<b?a:b)//  min  
using namespace std;
char s[305];
int ans(int a,int b,char c)//            
{
    switch(c)
    {
        case 'd': return a+b;
        case 'n': return min(a,b);
        case 'x': return max(a,b);
    }
}
int main()
{
    int t;
    scanf("%d",&t);
    char sz[100];//        
    while(t--)
    {
      memset(s,0,sizeof(s));
      memset(sz,0,sizeof(sz));
      scanf("%s",s);
      stack<char>word;
      stack<int>num;
      int l=strlen(s);
      for(int i=0;i<l;i++)
      {
          if(s[i]=='x'||s[i]=='n')//max min add              
            word.push(s[i]);//so                  
            if(s[i]=='d'&&s[i+1]=='d')//         wa      add   d   add     d        
            word.push(s[i]);
          if(s[i]>='0'&&s[i]<='9')//       
          {
                sscanf(&s[i],"%[0-9]",sz);//     sz,   
                int tp=atoi(sz);//atoi          
                num.push(tp);//     
                i+=strlen(sz)-1;//i i-1 
          }
          if(s[i]==')')// )  pop  
          {
              int b=num.top();num.pop();//b   
              int a=num.top();num.pop();//a    
              char pt=word.top();word.pop();
              num.push(ans(a,b,pt));
          }
      }
      printf("%d
",num.top()); } return 0; }

좋은 웹페이지 즐겨찾기