首页 > 其他 > 详细

NOIP1997 代数表达式

时间:2019-03-30 19:22:04      阅读:135      评论:0      收藏:0      [点我收藏+]

难度相当于普及-的一道水题,然而我只得了40分QAQ。

题目描述 

技术分享图片

输入:

输入一个字符串,以“;”结束,“;”本身不是代数表达式中字符,仅作为结束);

输出:

若表达式正确,则输出“OK”;若表达式不正确,则输出“Error”,及错误类型。

错误类型约定:

1.式了中出现不允许的字符;

2.括号不配对;

3.其它错误。 例如:输入:a+(b);
输出:OK

例如:输入:a+(b+c*a;
输出:Error 2

样例输入

a+(b); 样例输出

OK

这是一道特别简单的题(当时因为if的条件少了所以只过了不到一半)我太弱了

以下就是极其简单的代码

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
char s[100010];
int main()
{
    scanf("%s", &s);
    int cnt = 0, sign = 0;
    for(int i = 0;s[i] != ; && i < strlen(s);i++)
    {
        if(!(s[i]==a||s[i]==b||s[i]==c||s[i]==+||s[i]==-||s[i]==*||s[i]==/||s[i]==(||s[i]==)))
        {
            printf("Error 1");
            return 0;
        }
        if(s[i] == ()
        cnt++;
        if(s[i] == ))
    {
        if(cnt)
        cnt--;
        else
        {
        printf("Error 2");
        return 0;   
        }
    }
    if(s[i] == a || s[i] == b || s[i] == c)
    {
        sign++;
        if(sign != 1)
        break;
    }
    if(s[i] == * || s[i] == / || s[i] == + || s[i] == -)
    sign--;
    }
    if(sign != 1)
    {
        printf("Error 3");
        return 0;
    }
    if(cnt != 0)
    {
        printf("Error 2");
        return 0;
    }
    printf("OK");
    return 0;
}

 

NOIP1997 代数表达式

原文:https://www.cnblogs.com/jiqimin/p/10628399.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!