Max and Min---递归

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

 

 

 

 

 

 

 

 

全部评论

相关推荐

求个付费实习岗位:这种就是吃满时代红利又没啥技术水平,只能靠压力学生彰显优越感的老登,别太在意了
点赞 评论 收藏
分享
友友们,我实在是不太明白,校招的话现在大多也是提前实习,然后转正也是需要考核的,考核通过才能转正,那这跟实习转正有什么区别啊
苦闷的仰泳鲈鱼刷了1...:提前实习,是让你提前熟悉业务的,后续是入职后可以减少试用期的(大部分是包入职的);转正实习,要是hc不够或者其他原因,让你正式offer可能都没有,这个风险很大。 ---个人看法和了解到的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务