程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 遞歸 uva-620-Cellular Structure

遞歸 uva-620-Cellular Structure

編輯:C++入門知識

題目大意:   細胞正常分類有三種情況。   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;   }          

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved