日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

C++ PAT 乙级 ——1003 我要通过

發(fā)布時間:2025/3/15 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ PAT 乙级 ——1003 我要通过 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目詳情

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

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

字符串中必須僅有 P、 A、 T這三種字符,不可以包含其它字符; 任意形如 xPATx 的字符串都可以獲得“答案正確”,其中 x 或者是空字符串,或者是僅由字母 A 組成的字符串; 如果 aPbTc 是正確的,那么 aPbATca 也是正確的,其中 a、 b、 c 均或者是空字符串,或者是僅由字母 A 組成的字符串。

現(xiàn)在就請你為 PAT 寫一個自動裁判程序,判定哪些字符串是可以獲得“答案正確”的。

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

輸出格式:
每個字符串的檢測結(jié)果占一行,如果該字符串可以獲得“答案正確”,則輸出 YES,否則輸出 NO。

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

輸出樣例:
YES
YES
YES
YES
NO
NO
NO
NO

題目分析

(1)從題干中給到的“答案正確”的條件,可以得出判斷條件:
P之前的A的個數(shù) × P和T之間的A的個數(shù) = T之后的A的個數(shù)
并且:
P和T之間必須要有A出現(xiàn)

(這也是這道題目的核心,當(dāng)時想著一串 if 往上懟,但看了其他博主的文章后沒想到是一個很簡單的判斷條件,/(ㄒoㄒ)/~~)

∴我們要做的就是去分別統(tǒng)計不同位置的A的個數(shù),可采用下面的方法:

for (int i = 0; i < n; ++i){cin >> str;int count[3] = { 0 };int active;active = 0;for (int j = 0; j < strlen(str); ++j) //通過狀態(tài)量active來改變統(tǒng)計的位置{if (str[j] == 'A')count[active]++;else if (str[j] == 'P' && active == 0) //找到P之后將active加1,統(tǒng)計P和T之間的A的個數(shù){active++;}else if (str[j] == 'T' && active == 1) //找到T之后再將active加1,統(tǒng)計T之后的A的個數(shù){active++;}elsebreak;}………………(未完待續(xù))

(2)最后就是我們的判斷條件

………………(接上面)if ((active == 2) && (count[1]) && (count[2] == count[0] * count[1])){activate[i] = 1;} else{activate[i] = 0;}

說明:activate是一個用于接收判斷狀態(tài)的量,由于最后要整體輸出,因此無法在for循環(huán)里面輸出。

Final Code

#include<iostream>using namespace std;int main() {char str[100];int n;cin >> n;int* activate = new int[n]; //由于n不是一個常量,因此無法用它直接聲明數(shù)組,需要用動態(tài)分配for (int i = 0; i < n; ++i){cin >> str;int count[3] = { 0 };int active;active = 0;for (int j = 0; j < strlen(str); ++j) //通過狀態(tài)量active來改變統(tǒng)計的位置{if (str[j] == 'A')count[active]++;else if (str[j] == 'P' && active == 0) //找到P之后將active加1,統(tǒng)計P和T之間的A的個數(shù){active++;}else if (str[j] == 'T' && active == 1) //找到T之后再將active加1,統(tǒng)計T之后的A的個數(shù){active++;}elsebreak;}if ((active == 2) && (count[1]) && (count[2] == count[0] * count[1])){activate[i] = 1;}else{activate[i] = 0;}}for (int i = 0; i < n; ++i){if (activate[i] == 1)cout << "Yes" << endl;elsecout << "No" << endl;}delete[] activate;return 0; }

初學(xué)者,感謝大佬的提點
不足之處多多包涵~~(😀)

總結(jié)

以上是生活随笔為你收集整理的C++ PAT 乙级 ——1003 我要通过的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。