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)))