C  Max and Min---递归

 

解法 :

明显的递归

难点是关于字符串的分割   需要找到那个能分割的那个逗号    保证逗号不在括号里就ok

再加一组测试数据

Max(Min(Max(1,3),Min(5,6)),Max(1,-1))

 

代码

#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
typedef long long ll;
const int maxn=1e3+7;
ll solve(string s){
    if(s[1]=='i'){
        int cnt1=3,cnt2=s.size()-1,cnt3=-1,t=0;
        for(int i=cnt1+1;i<cnt2;i++){
            if(s[i]=='('){
                t+=1;
            }
            if(s[i]==')'){
                t-=1;
            }
            if(s[i]==','&&t==0)cnt3=i;
        }
        return min( solve(s.substr(cnt1+1,cnt3-cnt1-1)),solve(s.substr(cnt3+1,cnt2-cnt3-1)));
    }
    else if(s[1]=='a'){
        int cnt1=3,cnt2=s.size()-1,cnt3=-1,t=0;
        for(int i=cnt1+1;i<cnt2;i++){
            if(s[i]=='('){
                t+=1;
            }
            if(s[i]==')'){
                t-=1;
            }
            if(s[i]==','&&t==0)cnt3=i;
        }
        return max( solve(s.substr(cnt1+1,cnt3-cnt1-1)),solve(s.substr(cnt3+1,cnt2-cnt3-1)));
    }
    else {
        ll sum=0;
        ll f=1;
        if(s[0]=='-'){
            for(int i=1;i<s.size();i++){
                sum+=((int)(s[s.size()-i]-'0') )*f;
                f*=10;
            }
            sum=sum*-1;
        }
        else{
            for(int i=0;i<s.size();i++){
                sum+=((int)(s[s.size()-i-1]-'0') )*f;
                f*=10;
            }
        }
        return sum;
    }
}
int main(){
    string s;
    while(cin>>s){
        printf("%lld\n",solve(s));
    }
}
//1024
//Max(Min(5,-5),Min(-1,1))
//Max(Max(1,-1),Min(Max(1,3),Min(5,6)))