pat 乙级 1003 我要通过!(C++)
生活随笔
收集整理的這篇文章主要介紹了
pat 乙级 1003 我要通过!(C++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
“答案正確"是自動判題系統給出的最令人歡喜的回復。本題屬于 PAT 的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件,系統就輸出“答案正確”,否則輸出"答案錯誤”。
得到"答案正確"的條件是:
- 字符串中必須僅有 P、 A、 T這三種字符,不可以包含其它字符;
- 任意形如 xPATx 的字符串都可以獲得“答案正確”,其中x 或者是空字符串,或者是僅由字母A 組成的字符串;
- 如果aPbTc 是正確的,那么 aPbATca 也是正確的,其中 a、 b、 c 均或者是空字符串,或者是僅由字母 A 組成的字符串。
現在就請你為 PAT 寫一個自動裁判程序,判定哪些字符串是可以獲得“答案正確”的。
分析
題目內容較多,慢慢讀下來,以第2個條件為基礎,結合第3個條件多寫幾個字符串,最后有以下3點
- 字符串有且僅能有P、A、T 這3種字符
- P和T中間必須有A
- 設P前面A的數目為a1,P和T中間的為a2,T之后的為a3。三者滿足:a3=a1*a2。
AC代碼
#include<iostream> #include<string> #include<cstring> using namespace std; string judge(string s) {int i,a1=0,a2=0,a3=0,flag=0,len=s.length()+1;int p=0,t=0;string result;char ch[len];strcpy(ch, s.c_str());for(i=0;i<len-1;i++){if(ch[i]=='A'){if(flag==0)a1++;else if(flag==1)a2++;elsea3++;}else if(ch[i]=='P'){flag=1;p++;}else if(ch[i]=='T'){flag=2;t++;}else{return "NO";} }if(a2==0)return "NO";if(p!=1)return "NO";if(t!=1)return "NO";if(a1*a2==a3)result="YES";elseresult="NO";return result; } int main() {int i,n;cin>>n;string s;for(i=0;i<n;i++){cin>>s;if(i!=n-1)cout<<judge(s)<<endl;elsecout<<judge(s);}return 0; }歡迎點贊、評論、收藏,有任何問題,評論區一起討論吧!
更多題解
pat 乙級 題解匯總(持續更新)(C++)
總結
以上是生活随笔為你收集整理的pat 乙级 1003 我要通过!(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT 乙级(Basic Level)
- 下一篇: 《隋唐演义》读后感