生活随笔
收集整理的這篇文章主要介紹了
NYOJ 305 表达式求值
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
表達(dá)式求值
時(shí)間限制:
3000?ms ?|? 內(nèi)存限制:
65535?KB 難度:
3
描述
Dr.Kong設(shè)計(jì)的機(jī)器人卡多掌握了加減法運(yùn)算以后,最近又學(xué)會(huì)了一些簡(jiǎn)單的函數(shù)求值,比如,它知道函數(shù)min(20,23)的值是20?,add(10,98)?的值是108等等。經(jīng)過(guò)訓(xùn)練,Dr.Kong設(shè)計(jì)的機(jī)器人卡多甚至?xí)?jì)算一種嵌套的更復(fù)雜的表達(dá)式。
假設(shè)表達(dá)式可以簡(jiǎn)單定義為:
1.?一個(gè)正的十進(jìn)制數(shù)?x?是一個(gè)表達(dá)式。
2.?如果?x?和?y?是?表達(dá)式,則?函數(shù)min(x,y?)也是表達(dá)式,其值為x,y?中的最小數(shù)。
3.?如果?x?和?y?是?表達(dá)式,則?函數(shù)max(x,y?)也是表達(dá)式,其值為x,y?中的最大數(shù)。
4.如果?x?和?y?是?表達(dá)式,則?函數(shù)add(x,y?)也是表達(dá)式,其值為x,y?之和。
例如,?表達(dá)式?max(add(1,2),7)?的值為?7。
請(qǐng)你編寫(xiě)程序,對(duì)于給定的一組表達(dá)式,幫助?Dr.Kong?算出正確答案,以便校對(duì)卡多計(jì)算的正誤。
輸入第一行: N 表示要計(jì)算的表達(dá)式個(gè)數(shù) (1≤ N ≤ 10)?
接下來(lái)有N行, 每行是一個(gè)字符串,表示待求值的表達(dá)式
(表達(dá)式中不會(huì)有多余的空格,每行不超過(guò)300個(gè)字符,表達(dá)式中出現(xiàn)的十進(jìn)制數(shù)都不
超過(guò)1000。)輸出輸出有N行,每一行對(duì)應(yīng)一個(gè)表達(dá)式的值。樣例輸入 3
add(1,2)
max(1,999)
add(min(1,1000),add(100,99))
樣例輸出 3
999
200 AC碼: #include<stdio.h>
#include<string.h>
int main()
{int n,len,num[80],result[200];char str[305];scanf("%d",&n);while(n--){scanf("%s",str);len=strlen(str);int i=0,j=-1,sum=0,k=0,p;while(i<len){if(str[i]=='a'){num[++j]=1;i=i+4;}else if(str[i]=='m'){if(str[i+1]=='i')num[++j]=2;if(str[i+1]=='a')num[++j]=3;i=i+4;}else if(str[i]>='0'&&str[i]<='9'){sum=0;while(str[i]>='0'&&str[i]<='9'){sum=sum*10+str[i]-'0';i++;}result[k++]=sum;}else if(str[i]==')'){p=num[j--];k--;if(p==1){result[k-1]=result[k]+result[k-1];}if(p==2)result[k-1]=result[k]>result[k-1]?result[k-1]:result[k];if(p==3)result[k-1]=result[k]>result[k-1]?result[k]:result[k-1];i++;}elsei++;}printf("%d\n",result[0]);}return 0;
}
AC碼: #include<stdio.h>
char str[1005];
int i;
int eval()
{int x=0,a,b;while(str[i]==','||str[i]==')')i++;if(str[i+1]=='d'){i=i+4;return eval()+eval();}if(str[i+1]=='i'){i=i+4;a=eval();b=eval();return a<b?a:b;}if(str[i+1]=='a'){i=i+4;a=eval();b=eval();return a>b?a:b;}while(str[i]>='0'&&str[i]<='9'){x=x*10+str[i]-'0';i++;}return x;
}
int main()
{int T;scanf("%d",&T);while(T--){scanf("%s",str);i=0;printf("%d\n",eval());}return 0;
}
總結(jié)
以上是生活随笔為你收集整理的NYOJ 305 表达式求值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。