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; }