POJ3332 Parsing Real Numbers DFA
来源:互联网 发布:ag软件下载 编辑:程序博客网 时间:2024/06/06 11:04
这题本来可能一次性就AC掉的,可惜第二个减号忘打进去了,自己又测各种数据,就是没测减号的数据。Orz。。
#include<stdio.h>#include<string.h>char c[1000],s[1000],len,state;void init(){int i,j,tot=0;for(i=0;i<strlen(c);i++)if(c[i]!=' ')break;for(j=strlen(c)-1;j>=0;j--)if(c[j]!=' ')break;while(i<=j)s[tot++]=c[i++];len=tot;}bool dig(int i){if(s[i]>='0'&&s[i]<='9')return true;else return false;}bool judge(int i){if(state==0){if(s[i]=='+'||s[i]=='-')state=1;else if(dig(i))state=2;else if(s[i]=='e'||s[i]=='E')state=5;else return false;}else if(state==1){if(dig(i))state=2;else return false;}else if(state==2){if(s[i]=='.')state=3;else if(s[i]=='e'||s[i]=='E')state=5;else if(dig(i))state=2;else return false;}else if(state==3){if(dig(i))state=4;else return false;}else if(state==4){if(dig(i))state=4;else if(s[i]=='e'||s[i]=='E')state=5;else return false;}else if(state==5){if(s[i]=='+'||s[i]=='-')state=6;else if(dig(i))state=7;else return false;}else if(state==6){if(dig(i))state=7;else return false;}else if(state==7){if(dig(i))state=7;else return false;}return true;}void solve(){state=0;init();for(int i=0;i<len;i++){if(!judge(i)){printf("ILLEGAL\n");return;}}if(state==1||state==3||state==5||state==6)printf("ILLEGAL\n");else printf("LEGAL\n");}int main(){int T;scanf("%d",&T);getchar();while(T--){gets(c);solve();}return 0;}
下面附带把COJ的Parsing Real Numbers给贴出来,有点小不一样。
这道题要注意只要小数点左右只要一边有数即可,且需要coefficient。
#include<stdio.h>#include<string.h>char s[1000],len,state;bool dig(int i){if(s[i]>='0'&&s[i]<='9')return true;else return false;}bool judge(int i){if(state==0){if(s[i]=='+'||s[i]=='-')state=1;else if(dig(i))state=2;else if(s[i]=='.')state=8;else return false;}else if(state==1){if(dig(i))state=2;else if(s[i]=='.')state=8;else return false;}else if(state==2){if(s[i]=='.')state=3;else if(s[i]=='e'||s[i]=='E')state=5;else if(dig(i))state=2;else return false;}else if(state==3){if(dig(i))state=4;else if(s[i]=='e'||s[i]=='E')state=5;else return false;}else if(state==4){if(dig(i))state=4;else if(s[i]=='e'||s[i]=='E')state=5;else return false;}else if(state==5){if(s[i]=='+'||s[i]=='-')state=6;else if(dig(i))state=7;else return false;}else if(state==6){if(dig(i))state=7;else return false;}else if(state==7){if(dig(i))state=7;else return false;}else if(state==8)if(dig(i))state=4;else return false;return true;}void solve(){state=0;for(int i=0;i<len;i++){if(!judge(i)){printf("NO\n");return;}}if(state==1||state==5||state==6||state==8)printf("NO\n");else printf("YES\n");}int main(){freopen("t.txt","r",stdin);int T;scanf("%d",&T);getchar();while(T--){gets(s);len=strlen(s);solve();}return 0;}
0 0
- POJ3332 Parsing Real Numbers DFA
- POJ 3332 Parsing Real Numbers
- POJ 3332 Parsing Real Numbers 可能会
- UVa10464 - Big Big Real Numbers
- dfa
- dfa
- dfa
- dfa
- DFA
- DFA
- dfa
- 多人部件解析--Towards Real World Human Parsing: Multiple-Human Parsing in the Wild
- SCUT 2014 B题 Numbers (DFA有穷自动机)
- Floating-point Numbers Aren't Real
- csu oj 1031 Real Numbers(模拟)
- Floating-Point Numbers Aren’t Real
- the real role of Major and Minor Numbers(来源于网络)
- dda dfa
- Android系统在超级终端下必会的命令大全(adb shell命令大全)
- HDU 1159——Common Subsequence(DP)
- Lua调用C函数
- POJ 1163 DP 动态规划
- 石子合并
- POJ3332 Parsing Real Numbers DFA
- 无线路由不能上网问题的解决办法
- Flume SimpleAsyncHbaseEventSerializer 类解析
- 简化版的LDA源码
- poj2080!【水题】
- 从先序遍历和中序遍历重建二叉树
- 再试一下,看是否好用
- poj 2594 二分图 Floyd闭包+最小路径覆盖
- Dom解析XML文件具体用法