日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

NYOJ 305 表达式求值

發(fā)布時(shí)間:2025/3/16 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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ò),歡迎將生活随笔推薦給好友。