kuangbinOJ 1220 - 老师的方程(模拟)

来源:互联网 发布:网络编辑是什么 编辑:程序博客网 时间:2024/05/16 05:37

题目:

http://www.kuangbinoj.com:8080/problem.php?id=1220

题意:

中文题就不用了吧= =

思路:

模拟。

模拟弱=。=

#include <ctype.h>   isdigit(s[i]) 是数字返回true,否则NULL。

AC.

#include <iostream>#include <cstdio>#include <ctype.h>#include <cstring>using namespace std;char s[100005], x;int ok;bool in(int i){   if(!isdigit(s[i]) && s[i] != '=' && s[i] != '+' && s[i] != '-') return true;   return false;}int deal(int i){   if(i < 0) return -1;   if(ok) {         if(s[i] == '+') {             return 1;          }          else if(s[i] == '-') {             return -1;          }          else if(s[i] == '='){                ok = 0;                return 1;          }   }   else {         if(s[i] == '+') {             return -1;          }          else if(s[i] == '-') {             return 1;          }   }}int main(){  // freopen("in.in", "r", stdin);    int T;    scanf("%d", &T);    while(T--) {        scanf("%s", s);        int len = strlen(s);        int xn = 0, n = 0;        int k = 0, cnt, c;        ok = 1;        int i = len-1;        //printf("%d\n", isdigit(s[i]));        while(i >= 0) {            if(in(i)) {                  x = s[i];                  i--;                  if(i < 0) xn -= 1;                  else if(s[i] == '=') {                     ok = 0;                     xn++;                     i--;                  }                  else if(s[i] == '-' || s[i] == '+') {                         //printf("ok = %d %d\n", ok, i);                        xn += deal(i);                        i--;                  }                  else {                      cnt = 0;                      c = 1;                      while(isdigit(s[i]) && i >= 0) {                        cnt = cnt + (s[i]-'0')*c;                        c *= 10;                        i--;                     }                     //printf("cnt = %d\n", deal(i)*cnt);                     if(cnt == 0) xn += deal(i);                     else xn += deal(i)*cnt;                     i--;                     if(s[i] == '=') {                        ok = 0;                        i--;                     }                  }            }            else {               cnt = 0;               c = 1;               while(isdigit(s[i]) && i >= 0) {                  cnt = cnt + (s[i]-'0')*c;                  c *= 10;                  i--;               }               n += deal(i)*cnt;               i--;               if(s[i] == '=') {                  ok = 0;                  i--;               }            }        }        //printf("%d %d\n", xn, n);        double ans;        if(xn == 0) ans = 0;        else ans = (double)n / xn*-1;        if(ans == -0) ans = 0;        printf("%c=%.3f\n", x, ans);    }    return 0;}


0 0
原创粉丝点击