题解 | #牛牛的四则运算#

牛牛的四则运算

https://ac.nowcoder.com/acm/contest/20104/B

https://ac.nowcoder.com/acm/contest/20104/B

思路

模拟即可,先枚举全是数字,没有符号的情况。再循环枚举加减号,枚举完再倒退再枚举一遍乘除号。枚举的同时sum++存储时间戳,a[i]=sum。最后再循环输出。(感觉自己的方法好复杂。。。)

code

#include<bits/stdc++.h>//万能头
using namespace std;
const int MAXN=1000005;//宏定义
char s[MAXN];//原字符串s
int a[MAXN];//存储时间戳的a数组
int n,sum=1;//时间戳sum从1开始
bool bj,flg;//俩标记
int main()
{
    scanf("%d",&n);//输入n
    scanf("%s",s+1);//输入s
    for(int i=1;i<=n;i++)
    {
        if(s[i]=='+'||s[i]=='-'||s[i]=='/'||s[i]=='*')
        {
            bj=true;
            break;
        }
    }//枚举有没有运算符号
    if(bj==false)//没有直接输出
    {
        printf("%s",s+1);
        return 0;
    }
    for(int i=1;i<=n;i++)//枚举
    {
        if(flg==true&&(s[i]=='+'||s[i]=='-'))//先枚一遍+-
        {
            a[i]=sum;//存时间戳
            sum++;//时间戳++
        }//这里flag=true代表是第一遍枚举
        if(flg==false&&(s[i]=='/'||s[i]=='*'))//再枚一遍/*
        {
            a[i]=sum;
            sum++;//同理
        }//flag==false是重来的那一遍
        if(i==n&&flg==false)//如果加减枚完了
        {
            i=1;//再枚一遍
            flg=true;//标记打上
        }
    }
    for(int i=1;i<=n;i++)//循环输出
    {
        if(s[i]!='+'&&s[i]!='-'&&s[i]!='/'&&s[i]!='*')//不是运算符号
        {
            printf("%c",s[i]);//直接输出
            continue;
        }
        printf("%c[%d]",s[i],a[i]);//打上时间戳输出
    }
    return 0;//结束
}

The End

全部评论

相关推荐

活泼的代码渣渣在泡池...:哈哈哈挺好的,我也上岸美团了,不说了,我又接了一单
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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