Problem C
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/65536K (Java/Other)
Total Submission(s) : 77 Accepted Submission(s) : 35
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
姚班长喜欢挑战难题,但他讨厌英文。最近,他偶然在OJ上看到一道中文题,在欣喜若狂的同时,却发现题目是如此之难。所以,他想和大家一起探讨,题目是这样的:
在程序设计语言里,我们经常要用到算术运算符。同时,我们也知道计算机是通过指令来进行运算的。对于给定指令,你能否得到其计算结果呢?
在程序设计语言里,我们经常要用到算术运算符。同时,我们也知道计算机是通过指令来进行运算的。对于给定指令,你能否得到其计算结果呢?
Input
每行输入n,m,其中n代表变量初始值,m(1<=m<=100)为指令条数,指令长度不超过200。接下来是m条指令,指令有五种形式:合法的有:++,--,+=v,-=v(v为一个数字),还有一种是不合法的,一共有这些不合法情况:==100, -=, +=, -+, +-,++100,--100,对于这种指令则忽视它。
Output
输出n最后的值。(数据保证n的最后值不超过2^31-1)
Sample Input
1 2 ++ ++ 1 4 +=100 -=1 -+ +=
Sample Output
3 100
————————————————————————————————————————————————————————————————————
(ps:字符串一直有点渣。。改了好几遍,好在一发AC还爽一点)
1.scanf直接读字符和数字
2.判断+=后面是不是负数(确实没想到)其他的应该挺水吧。。。
代码如下:
#include<stdio.h> #include<string.h> #include<math.h> int main() { int n,m,i,v,flag; char a[100]; while(~scanf("%d %d",&n,&m)){ while(m--) { flag=0; v=0; scanf("%s",a); if(a[2]=='-') flag=1; for(i=(flag?3:2);a[i]!=0;i++) v=v*10,v+=(a[i]-'0'); if(a[0]=='+'&&a[1]=='+'&&v==0) n++; if(a[0]=='-'&&a[1]=='-'&&v==0) n--; if(a[0]=='+'&&a[1]=='=') { if(flag==1) n-=v; else n+=v; } if(a[0]=='-'&&a[1]=='=') { if(flag==1) { n+=v; } else { n-=v; } } } printf("%d\n",n); return 0; }
大一刚接触ACM,方法不一定好,希望大神指点,不喜勿喷。