1. 程式人生 > >1003. 我要通過!(20)(java版)

1003. 我要通過!(20)(java版)

這個PAT欄目就記錄一些我用java實現的PAT上的題,有甲級的有乙級的,但並不是所有的題都記錄,因為有些題確實沒有記錄的意義,我就記錄一些我感覺有一些價值或者不太好理解的題,有時我不會的題,我會轉載一些解題方法,希望可以幫助到大家。

我第一道被難住的題,我根本沒想到我會這麼快被一道題難住,畢竟我以前已經用C++把PAT乙級做過一遍了(其實一部分是看別人的程式碼)。

題目:

“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。

得到“答案正確”的條件是:

  1. 字串中必須僅有P, A, T這三種字元,不可以包含其它字元;
  2. 任意形如 xPATx 的字串都可以獲得“答案正確”,其中 x 或者是空字串,或者是僅由字母 A 組成的字串;
  3. 如果 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

思路:

(這個思路是柳婼大神的,我其實沒做出來,我看了一會發現和我想的完全不一樣,我瞬間感覺我真的好笨。柳婼原版的部落格地址:點我一下
任意形如 xPATx 的字串都可以獲得“答案正確”,其中 x 或者是空字串,或者是僅由字母 A 組成的字串;
那麼正確的有這些:
PAT
APATA
AAPATAA
AAAPATAAA
…不說了,就是中間一個A左右加上等量的A(不加也行)都是正確的。

如果 aPbTc 是正確的,那麼 aPbATca 也是正確的,其中 a, b, c 均或者是空字串,或者是僅由字母 A 組成的字串。
拿上面的那幾個正確的舉例子,那麼正確的有這些:
PAT —— 對於 aPbTc 來說ac是空,b是A。所以 PAAT 是正確的。同理PAAAAAT中間加多少個A都是正確噠~
APATA —— 對於aPbTc來說,abc都是A。所以 APAATAA 是正確的。再類推一下,那麼 APAAATAAA 是正確的。
AAPATAA —— 對於aPbTc來說,a和c是AA,b是A。所以AAPAATAAAA是正確的,再類推一下,AAPAAATAAAAAA 是正確的~
所以說規律就是,可以在P和T中間加A並且在T後面加A,要求必須是,中間加上一個A,末尾就得加上幾倍的(P前面A的那個字串)。換句話說就是,中間的A的個數如果是3,那麼末尾的A的個數就得是開頭A的個數的3倍。很巧,當中間A為一個的時候,末尾和開頭A的個數必須相等正好是第二條的要求~~~

所以一句話總結字串的要求:只能有一個P一個T,中間末尾和開頭可以隨便插入A。但是必須滿足開頭的A的個數 * 中間的A的個數 = 結尾的A的個數

所以檢驗的時候,讓i停留在出現P的地方,然後讓k停留在字串裡面T的地方,那麼len – 1 – k就是T後面的A的個數,k – 1 – i就是P和T中間的A的個數,而i呢是P前面A的個數~因為必須滿足開頭的A的個數中間的A的個數 = 結尾的A的個數。所以檢驗的程式碼為(len – 1 – k) == ((k – 1 – i) i);

程式碼:

import java.util.Scanner;    
public class Main{    
    public static void main(String[] args){    
        Scanner sc = new Scanner(System.in);    
        int n = sc.nextInt();  
        sc.nextLine();  
        for(int i=0 ;i<n ;i++){  
            String s = sc.nextLine();  
            String news = s;  
            if(news.contains("P")&&news.contains("A")&&news.contains("T")){  
                news = news.replace("A", "");  
                news = news.replace("P", "");  
                news = news.replace("T", "");  
                if(news.isEmpty()){  
                    int p = s.indexOf("P");  
                    int t = s.indexOf("T");  
                    int len = s.length();  
                    int b = t-p-1;  
                    int c = len -t -1;  
                    if(p*b==c){  
                        System.out.println("YES");  
                    }else{  
                        System.out.println("NO");  
                    }  
                }else{  
                    System.out.println("NO");  
                }  
            }else{  
                System.out.println("NO");  
            }  
        }  
    }  
} 

相關推薦

1003. 通過(20)(java)

這個PAT欄目就記錄一些我用java實現的PAT上的題,有甲級的有乙級的,但並不是所有的題都記錄,因為有些題確實沒有記錄的意義,我就記錄一些我感覺有一些價值或者不太好理解的題,有時我不會的題,我會轉載一些解題方法,希望可以幫助到大家。 我第一道被難住的題,

PAT 乙級 1003. 通過(20) Java

“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是: 1. 字串中必須僅有P, A, T這三種字元,不可以包含其它字元; 2.

1003. 通過(20)-浙大PAT乙級真題Java實現

1003. 我要通過!(20)“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。

pat 1003 通過(20)

裁判 pro 組成 title brush true get char s hat 1003 我要通過!(20)(20 分) “答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件,系統就輸出“答案正確

1003. 通過(20)-浙大PAT乙級真題

1003. 我要通過!(20)“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。得到“

1003 通過(20)(20 分)

題目:https://pintia.cn/problem-sets/994805260223102976/problems/994805323154440192 “答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字串滿足下列

C++·PAT乙級1003. 通過(17/20)

c++ ons 復雜 RR 空字符串 std 答案 %s strlen /* 1003. 我要通過!(20) “答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案

PTA乙級題 1003 通過20 分)

1003 我要通過! (20 分) “答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是:

1003 通過20 分)

“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是: 字串中必須僅有 P、 A、 T這三種字元,不可以包含其它字

PAT乙級1003 通過20 分)

“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是:

1003 通過 (20 分)

“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是:

PAT-1003 通過20 分)

1003 我要通過! (20 分) “答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯

PAT刷題集(乙級)1003 通過20 分)

1003 我要通過!(20 分) “答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”

java-1003 通過

今天上午寫了一上午,倒也不是非常難,只要推倒一下就能出來,但是我就是想知道自己為什麼錯啊啊啊啊啊 先貼題: 1003 我要通過!(20)(20 分) “答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,

1003 通過20 分)題目實在看不懂。。。。

“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是: 字串中必須僅有 P、 A、 T這三種字元,不可以包含其它字元; 任意形

PAT——1003. 通過

ron 正則表達 test 現在 gre 空字符串 spa get 測試 原題目鏈接:我要通過 “答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到

PAT 1003.通過

clas names 接下來 close != 條件 alt 裁判 iostream 1003. 我要通過!(20) “答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件,系統就輸出“答案正確”,否則輸

1003 通過| PAT (Basic Level) Practice

get esp 必須 記錄 字母 字符串個數 con jdi 空格 1003 我要通過! (20 分) “答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”

PAT 乙級真題 1003 通過題解

1003 我要通過! (20 分) “答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是: 字串中必須僅有 P、

1003 通過——C++實現

題目 1003 我要通過! (20 point(s)) “答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是: 字