NYOJ 305 표현 식 값 구하 기 (재 귀적)

1867 단어 데이터 구조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 줄 이 있 습 니 다. 각 줄 은 표현 식 의 값 에 대응 합 니 다.
샘플 입력
3add(1,2) max(1,999) add(min(1,1000),add(100,99)) 

샘플 출력
3999200

근원
제4 회 하남성 프로 그래 밍 대회
업로드 자
장 운 총
재 귀적 으로 하기:
#include<stdio.h>
#include<iostream>
using namespace std;
char str[1005];
int start;
int vec(){
	int v,n;
	switch(str[start]){
		case 'm':start+=3;
				 if(str[start-2]=='i')
				 	return min(vec(),vec());
				 else return max(vec(),vec());
		case 'a':start+=3;
				 return vec()+vec();
		case '(':
		case ')':
		case ',':++start;
				 return vec();
		default :sscanf(str+start,"%d%n",&v,&n);//    str  start      v,v n ,    
				 start+=n;
				 return v;//    v
	}
}
int main(){
	int n;
	scanf("%d
",&n); while(n--){ start=0; gets(str); printf("%d
",vec()); } return 0; }

좋은 웹페이지 즐겨찾기