日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ACM】nyoj_305_表达式求值_201308081018

發布時間:2023/12/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ACM】nyoj_305_表达式求值_201308081018 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

表達式求值
時間限制:3000 ms? |? 內存限制:65535 KB
難度:3
描述
Dr.Kong設計的機器人卡多掌握了加減法運算以后,最近又學會了一些簡單的函數求值,比如,它知道函數min(20,23)的值是20 ,add(10,98) 的值是108等等。經過訓練,Dr.Kong設計的機器人卡多甚至會計算一種嵌套的更復雜的表達式。

假設表達式可以簡單定義為:

1. 一個正的十進制數 x 是一個表達式。

2. 如果 x 和 y 是 表達式,則 函數min(x,y )也是表達式,其值為x,y 中的最小數。

3. 如果 x 和 y 是 表達式,則 函數max(x,y )也是表達式,其值為x,y 中的最大數。

4.如果 x 和 y 是 表達式,則 函數add(x,y )也是表達式,其值為x,y 之和。

例如, 表達式 max(add(1,2),7) 的值為 7。

請你編寫程序,對于給定的一組表達式,幫助 Dr.Kong 算出正確答案,以便校對卡多計算的正誤。

輸入
第一行: N 表示要計算的表達式個數 (1≤ N ≤ 10)
接下來有N行, 每行是一個字符串,表示待求值的表達式
(表達式中不會有多余的空格,每行不超過300個字符,表達式中出現的十進制數都不
超過1000。)
輸出
輸出有N行,每一行對應一個表達式的值。
樣例輸入
3
add(1,2)
max(1,999)
add(min(1,1000),add(100,99))
樣例輸出
3
999
200

來源
第四屆河南省程序設計大賽

?

?

#include <stdio.h>
#include <string.h>

char str[1100];
char a[1100];
int b[1100];

int count(int a,int b,char c)
{
??? if(c=='a')
??? return a>b?a:b;
??? if(c=='d')
??? return a+b;
??? if(c=='i')
??? return a<b?a:b;
}
int main()
{
??? int N;
??? scanf("%d",&N);
??? while(N--)
??? {
??????? int i,atop,btop,t;
??????? memset(str,0,sizeof(str));
??????? memset(a,0,sizeof(a));
??????? memset(b,0,sizeof(b));
??????? atop=btop=1;
??????? scanf("%s",str);
??????? for(i=0;i<strlen(str);)
??????? {
??????????? if(str[i]>='a'&&str[i]<='z')
??????????? {
??????????????? i++;
??????????????? if(str[i]=='d')
??????????????? a[atop++]='d';
??????????????? else if(str[i]=='a')
??????????????? a[atop++]='a';
??????????????? else if(str[i]=='i')
??????????????? a[atop++]='i';
??????????????? i+=2;
??????????? }? //將 三種運算進棧,
??????????? else if(str[i]=='('||str[i]==',')
??????????? i++;
??????????? else if(str[i]>='0'&&str[i]<='9')
??????????? {
??????????????? t=0;
??????????????? while(str[i]>='0'&&str[i]<='9')
??????????????? {
??????????????????? t=t*10+str[i]-'0';
??????????????????? i++;
??????????????? }// 將數字進棧
??????????????? b[btop++]=t;
????//printf("%d\n",i);
??????????? }
??????????? else if(str[i]==')') //如果出現右括號,則拿出兩個數字和一個字符進行運算? 出棧
??????????? {
??????????????? t=count(b[--btop],b[--btop],a[--atop]);
??????????????? b[btop++]=t;
??????????????? i++;
??????????????? //printf("%d\n",t);
??????????? }
??????? }
??????? //printf("%d\n",b[1]);
??????? printf("%d\n",b[--btop]);//和上一句等價
??? }
??? return 0;
}

?

//棧的簡單運用

轉載于:https://www.cnblogs.com/xl1027515989/p/3245344.html

總結

以上是生活随笔為你收集整理的【ACM】nyoj_305_表达式求值_201308081018的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。