• 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;
    }
  • 相关阅读:
    Android tcpdump 抓包
    Android CursorAdapter 查询联系人过滤
    Android 项目打包成apk文件
    解决Centos 6.3 中 gedit中文乱码问题
    在Linux(centos)系统上用手机调试android程序(eclipse)
    系统定时关机命令–shutdown
    使用gdb Server调试嵌入式程序
    Vim 错误排查方法
    通过netstat命令查看进程与端口的对应关系
    dexpler的使用方法
  • 原文地址:https://www.cnblogs.com/jiqimin/p/10628399.html
Copyright © 2020-2023  润新知