NOIP1997 代数表达式

难度相当于普及-的一道水题,然而我只得了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;
}

猜你喜欢

转载自www.cnblogs.com/jiqimin/p/10628399.html