PAT_B_1003 我要經過!

題目描述: 測試

「答案正確」是自動判題系統給出的最使人歡喜的回覆。本題屬於 PAT 的「答案正確」大派送 —— 只要讀入的字符串知足下列條件,系統就輸出「答案正確」,不然輸出「答案錯誤」。
獲得「答案正確」的條件是:
字符串中必須僅有 P、 A、 T這三種字符,不能夠包含其它字符;
任意形如 xPATx 的字符串均可以得到「答案正確」,其中 x 或者是空字符串,或者是僅由字母 A 組成的字符串;
若是 aPbTc 是正確的,那麼 aPbATca 也是正確的,其中 a、 b、 c 均或者是空字符串,或者是僅由字母 A 組成的字符串。
如今就請你爲 PAT 寫一個自動裁判程序,斷定哪些字符串是能夠得到「答案正確」的。

輸入格式:
每一個測試輸入包含 1 個測試用例。第 1 行給出一個正整數 n (<10),是須要檢測的字符串個數。接下來每一個字符串佔一行,字符串長度不超過 100,且不包含空格。

輸出格式:
每一個字符串的檢測結果佔一行,若是該字符串能夠得到「答案正確」,則輸出 YES,不然輸出 NO。

輸入樣例:
8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
輸出樣例:
YES
YES
YES
YES
NO
NO
NO
NO

本人AC代碼:spa

//  Auto_PAT
//  「答案正確」的條件是:
//         字符串中必須僅有 P、 A、 T這三種字符,不能夠包含其它字符;
//         任意形如 xPATx 的字符串均可以得到「答案正確」,其中 x 或者是空字符串,或者是僅由字母 A 組成的字符串;
//         若是 aPbTc 是正確的,那麼 aPbATca 也是正確的,其中 a、 b、 c 均或者是空字符串,或者是僅由字母 A 組成的字符串。

# include <stdio.h>
# include <stdlib.h>
 
//  用鏈表來實現字符的存儲 
typedef struct ch
{
    char val[101];
    struct ch * next;
}CH, * PCH;

int main(void)
{
    int n;
    PCH pHead, pTail; // 指針類型 (頭指針)(尾指針)
    PCH pNODE;
    int i, j;
    int P,T;
    int count1, count2, count3;
    char temp;
    count1 = count2 = count3 = 0;
    P = T = 0;
    int flag = -1;
    
    pHead = (PCH)malloc(sizeof(CH));
    pTail = pHead;
    // 初始化鏈表,分配內存 
    scanf("%d",&n);
    for (i=0; i<n; i++)
    {
        PCH pNode = (PCH)malloc(sizeof(CH));
            
        pTail->next = pNode;
        pNode->next = NULL;
        pTail = pNode;                
    }
    // 輸入字符
    pNODE = pHead->next;
    for (i=0; i<n; i++)
    {
        scanf("%s",pNODE->val);
        pNODE = pNODE->next; 
    }    
    // 下面對輸入的內容進行判斷 
    pNODE = pHead->next;
    for (i=0; i<n; i++)
    {
        count1 = count2 = count3 = 0;
        P = 0;
        T = 0;
        j = 0;
        while(pNODE->val[j] != '\0')
        {
//            printf("=================================\n");
            temp = pNODE->val[j];
            if(temp=='P'||temp=='A'|| temp=='T')
            {
                // 計算 PT 前面的 中間的 後面的A 的個數
                if (temp == 'P')
                  P++;
//                  printf("P  ===  %d \n",P);
                if (temp == 'T')
                    T++;
                if (P>1 || T>1)
                    {
                        flag = 0;
                        break;
                    }
                if (temp=='T' && P==0)  
                    {
                        flag = 0;
                        break;
                    }
                    // P 前面 
                if (P==0)
                {
                    if(temp == 'A') 
                        count1++;
                } 
                // pT 之間 
                if (P==1 && T==0)
                {
                    if(temp == 'A') 
                        count2++;
                } 
                
                // T 後面 
                if (P==1 && T==1)
                {
                    if(temp == 'A') 
                        count3++;
                }
                
                if (count1*count2 == count3)
                    flag = 1;
                else
                    flag = 0;    
                if (count2 == 0)     
                    flag = 0;
            }
            else
            {
                flag = 0;
                break;
            }
            j++;
        }
        if (P==0 || T==0)
        {
            flag = 0;
        }
//        printf("flag ==== %d\n",flag);
        if (flag == 0)
            printf("NO\n");
        else
            printf("YES\n");
        pNODE = pNODE->next; 
    }
    
    return 0;
}
相關文章
相關標籤/搜索