zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Validate US Telephone Numbers
    7月份总结
    Arguments Optional
    Everything Be True
    手机开发网页模板(20140124)
    整站开发初始化
    switch滑动开关
    js 面向对象
    Bootstrap 导航栏
    Bootstrap 标签页
  • 原文地址:https://www.cnblogs.com/jiqimin/p/10628399.html
Copyright © 2011-2022 走看看