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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

COJ1182(表达式)

發布時間:2023/12/13 综合教程 22 生活家
生活随笔 收集整理的這篇文章主要介紹了 COJ1182(表达式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

設S是一個合法的表達式,E為一個數字字符序列,則合法的表達式可以表示為:E, +E, -E, (S),+(S),-(S),S+(S),S-(S),S*(S),S/(S) 等。(E可以是全‘0’的字符串)。
請注意+S, -S, S+S等不一定是合法的表達式,因為可能出現如“+-E”運算符相鄰情況,另外出現“()”括號中沒有元素的表達式也是不合法的。

Input

每行一個字符串,最長不超過1023個字符。可能有空行。

Output

如果表達式合法,輸入“Yes”,否則輸入“No”,然后換行。
如果表達式為空,則輸出一個空行。

Sample Input

-1+2
+-1+2

+(-1+2)
()-23

Sample Output

Yes
No

Yes
No


第一次寫自動機,最開始沒調用初始化自動機的函數,調了n久,測試數據對后,交上去又WA,反復檢查了自動機好幾遍,硬是沒發現錯誤,最后無意中發現輸出的是“Yes”和“No”,而我寫成了“YES"和”NO",改過之后就AC了……

View Code

#include <stdio.h>
#include <string.h>
#define INI 0
#define NUM 1
#define OPT 2
#define WRN -1
#define N 1024
int table[4][130];
char s[N];
int n;
void init()
{
    int state,ch;
    memset(table,0xff,sizeof(table));
    for(ch='0';ch<='9';ch++)    table[INI][ch]=table[NUM][ch]=table[OPT][ch]=NUM;
    table[INI]['+']=OPT;
    table[INI]['-']=OPT;

    table[NUM]['+']=OPT;
    table[NUM]['-']=OPT;
    table[NUM]['*']=OPT;
    table[NUM]['/']=OPT;
}
int dfa(int a,int b)
{
    int i,j,state=INI;
    if(a>b) return WRN;
    for(i=a;i<=b;i++)
    {
        if(s[i]==' ' || s[i]=='\t') continue;
        if(s[i]=='(')
        {
            if(state==NUM)   return WRN;
            int cnt=1;
            for(j=i+1;j<=b;j++)
            {
                if(s[j]=='(')    cnt++;
                else if(s[j]==')')    cnt--;
                if(cnt==0)   break;
            }
            if(cnt || dfa(i+1,j-1)!=NUM)  return WRN;
            state=NUM;
            i=j;
        }
        else state=table[state][s[i]];
        if(state==WRN)   return WRN;
    }
    if(state==NUM)  return NUM;
    return WRN;
}
int main()
{
    init();
    while(gets(s))
    {
        n=strlen(s);
        if(n==0)    puts("");
        else    printf("%s\n",dfa(0,n-1)==NUM?"Yes":"No");
    }
    return 0;
}

總結

以上是生活随笔為你收集整理的COJ1182(表达式)的全部內容,希望文章能夠幫你解決所遇到的問題。

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