SCUT 2014 B题 Numbers (DFA有穷自动机)

题目链接:   SCUT 2014

题目大意:   判断给出的字符串中是否是正确的科学计数法

A+1.5Be+8C,可以是实数或者含有指数的实数,ABC三个部分表示空格,可有可无,正负号可有可无

指数部分只能是整数

解题思路:   建立有穷自动机状态转移表,一共是10种状态

-1表示无法不合法,最终状态为0 2 4 5 8 9五种状态均为合法,其余的都为非法

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 30
char ch1[2070];
int Find[MAX][MAX]={
    {1,2,6,0,-1},        // 1 空
    {-1,2,6,-1,-1},      // 2 +
    {-1,2,6,5,3},        // 3 +1
    {-1,4,-1,-1,-1},     // 4 +1.
    {-1,4,6,5,-1},       // 5 +1.5
    {-1,-1,6,5,-1},      // 6 +1.5__
    {7,8,-1,-1,-1},      // 7 +1.5__E
    {-1,8,-1,-1,-1},     // 8 +1.5__E+
    {-1,8,-1,9,-1},      // 9 +1.5__E+8
    {-1,-1,-1,9,-1}      //10 +1.5__E+8___
};

bool Solve(int tlen)
{
    int i,p=0;
    for(i=0;i<tlen;i++)
    {
        if(ch1[i]==‘+‘||ch1[i]==‘-‘)
            p=Find[p][0];
        else if(ch1[i]>=‘0‘&&ch1[i]<=‘9‘)
            p=Find[p][1];
        else if(ch1[i]==‘e‘||ch1[i]==‘E‘)
            p=Find[p][2];
        else if(ch1[i]==‘ ‘)
            p=Find[p][3];
        else if(ch1[i]==‘.‘)
            p=Find[p][4];
        else
            return false;
        if(p==-1)
            return false;
    }
    if(p==0||p==2||p==4||p==5||p==8||p==9)
        return true;
    return false;
}

int main()
{
    int i,j,tlen,t;
    scanf("%d",&t);
    gets(ch1);
    while(t--)
    {
        gets(ch1);
        tlen=strlen(ch1);
        if(Solve(tlen))
            printf("LEGAL\n");
        else
            printf("ILLEGAL\n");
    }
    return 0;
}

SCUT 2014 B题 Numbers (DFA有穷自动机)

时间: 2024-10-12 20:02:38

SCUT 2014 B题 Numbers (DFA有穷自动机)的相关文章

清华集训2014 做题记录

清华集训2014做题记录 已完成 [清华集训2014]玛里苟斯 [清华集训2014]主旋律 [清华集训2014]奇数国 [清华集训2014]矩阵变换 [清华集训2014]sum [清华集训2014]虫逢 [清华集训2014]玄学 [清华集训2014]文学 未完成 [清华集训2014]卡常数 [清华集训2014]简单回路 [清华集训2014]Router [清华集训2014] Breaking Bomber 写一题要膜一题题解,膜完题解膜代码,膜完代码膜指导,膜了好几天了还有四个题没做. [清华集

ISG 2014 逆向题分析

文章作者:Crack_Qs[4st][PDG] 使用工具:Vs 2013.ollydbg 1.10 测试平台:windows 7 x64 ///////////////////////////////////////////////////////////////////////////////////////////////////// 验证CALL: 013C1050 /$ 55 PUSH EBP ; 验证CALL013C1051 |. 8BEC MOV EBP, ESP013C1053 |

[杂记]注册电气工程师考试2014真题

今年又到方山晓庄学院陪考注册电气考试.和往年一样,每一年都会有同学来不及赶到考场.如果你要报考2015年考试,接下来的内容希望帮到你. 1.关于复习及教材: 每年考试很多朋友都说后悔,准备的太晚了,工作太忙了,考场太远了,教材不对了?不一而足. 个人觉得还是从自身找原因比较好,这样才可以改进.首先就是应该好好复习,不用太早,提前2-3个月,用心复习,每天都要留出2-3个小时.时间是你自己可以掌控的,一定要安排出看书的时间.不要说没时间,只不过你没把时间安排给复习而已. 至于教材呢,专业基础看天大

不等数列(noip 2014 模拟题)

[题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有k个“<”.答案对2012取模. [输入格式] 第一行2个整数n,k. [输出格式] 一个整数表示答案. [样例输入] 5 2 [样例输出] 66 [数据范围] 对于30%的数据:n <= 10 对于100%的数据:k < n <= 1000, /* f[i][j]向前i位数中插入j个'<’种数 当我们向长为i-1序列中插入第i个数时,当

[NOI 2014]做题记录

[NOI2014]起床困难综合症 按位贪心 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #define maxn 100010 using namespace std; int n, m; int tp[maxn], v[maxn]; int getans(int final, int p){ for(int i = 1; i <= n; i

Soj题目分类

-----------------------------最优化问题------------------------------------- ----------------------常规动态规划  SOJ1162 I-Keyboard  SOJ1685 Chopsticks SOJ1679 Gangsters SOJ2096 Maximum Submatrix  SOJ2111 littleken bg SOJ2142 Cow Exhibition  SOJ2505 The County

待刷题目分类

各大OJ题目归类 Posted on 2012 年 8 月 8 日 by admin ---------–最优化问题------------- --------动态规划 SOJ1162 I-Keyboard SOJ2096 Maximum Submatrix SOJ2111 littleken bg SOJ2505 The County Fair SOJ2818 QQ音速 SOJ2469 Exploring Pyramids SOJ1833 Base Numbers SOJ2009 Zeros

Incircle and Circumcircle(二分+几何)浙大月赛zoj3806(详解版)图

Incircle and Circumcircle Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge A triangle is one the basic shapes in geometry. It's a polygon with three vertices and three sides which are line segments. A triangle with vertices A, B, C is denot

洛谷【P1351】codevs3728 联合权值

题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离.对于图G 上的点对( u, v) ,若它们的距离为2 ,则它们之间会产生Wu×Wv 的联合权值. 请问图G 上所有可产生联合权值的有序点对中,联合权值最大的是多少?所有联合权值之和是多少? 输入输出格式 输入格式: 输入文件名为link .in. 第一行包含1 个整数n . 接下来n - 1 行,每