当前位置:编程学习 > C/C++ >>

递归 uva-620-Cellular Structure

题目大意:
 
细胞正常分类有三种情况。
 
1.simple stage                 OA     //O代表着健康的细胞分类形式,这表示正在进行simple stage阶段。
 
2.fully-grown stage          OAB  //O代表着健康的细胞分类形式,这表示正在进行fully-grown stage阶段。
 
3.mutagenic stage           BOA //O代表着健康的细胞分类形式, 这表示正在进行mutagenic stage阶段。
 
给一个序列,让你求出当前细胞正在进行的阶段。如果不是前面三种情况则说明细胞已经变异了,则输出变异阶段。
 
如果同时存在两种阶段,则按上面顺序输出排在最上面的一种。
 
 
 
解题思路:
 
对当前序列,依次按上面三种阶段试探,当都不满足时,说明细胞已经变异了。
 
 
 
代码:
 
[cpp]  
#include<iostream>  
#include<cmath>  
#include<cstdio>  
#include<cstdlib>  
#include<string>  
#include<cstring>  
#include<algorithm>  
#include<vector>  
#include<map>  
#include<stack>  
#include<queue>  
#define eps 1e-6  
#define INF (1<<20)  
#define PI acos(-1.0)  
using namespace std;  
  
  
char save[1200];  
  
int dfs(int begin,int end)  //1 代表第一种类型,2代表第二种类型,3代表第三种类型,0代表其他类型  
{  
    if(begin==end&&save[begin]=='A') //如果只有一个A,正在进行第一阶段  
        return 1;  
    if(end-begin>=1&&save[end]=='A'&&dfs(begin,end-1)) //判断是否满足第一阶段  
        return 1;  
    if(end-begin>=2&&save[end]=='B'&&save[end-1]=='A'&&dfs(begin,end-2)) //判断是否满足第二阶段  
        return 2;  
    if(end-begin>=2&&save[begin]=='B'&&save[end]=='A'&&dfs(begin+1,end-1)) //判断是否满足第三阶段  
        return 3;  
    return 0;  
}  
  
int main()  
{  
    int n;  
  
    scanf("%d",&n);  
  
    while(n--)  
    {  
        scanf("%s",save);  
        int len=strlen(save);  
  
  
        int ans=dfs(0,len-1);  
  
        switch(ans)  
        {  
            case 0:printf("MUTANT\n");break;  
            case 1:printf("SIMPLE\n");break;  
            case 2:printf("FULLY-GROWN\n");break;  
            case 3:printf("MUTAGENIC\n");break;  
        };  
    }  
    return 0;  
}  
 
 
 
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,