1003 我要通過(PAT 乙級 )C語言

2021-10-04 06:58:25 字數 1266 閱讀 3472

得到「答案正確」的條件是:

1、字串中必須僅有 p、 a、 t這三種字元,不可以包含其它字元;

2、任意形如 xpatx 的字串都可以獲得「答案正確」,其中 x 或者是空字串,或者是僅由字母 a 組成的字串;

3、如果 apbtc 是正確的,那麼 apbatca 也是正確的,其中 a、 b、 c 均或者是空字串,或者是僅由字母 a 組成的字串。

條件3剛開始給我整暈了,後來我通過題目給的測試用例分析:

假設 s = aapaataa,如何判斷它是否正確呢?

我們對比條件三,採用倒推的方式,令s = apbatca形式,(a=『aa』,b=『a』,c=』 『), 那麼推回去就是 s』 = aapat,此時判斷s』是不是正確的呢?根據條件2來判斷s『是錯誤的,於是s也是錯誤的。

**流程:

首先找出p和t的位置,記為index_p 和 index_t; 此外其他的位置只能存放』a』; 這是滿足條件一的必然要求,否則列印『no』;

用left , mid , right 分別計算左邊,中間,右的』a『的數量。

(a a p a a t a a)

如果mid>=2,則採用倒退形式,每一次都讓mid- - && right = right - left; 直到 mid ==1返回;

這時候用條件2來判斷, 即若left == right 則 通過 列印』yes『 否則 』no『

#include

#include

#define max 10

intfind_p

(char res)

intfind_t

(char res,

int i)

intmain()

;for

(i=0

; i) left = index_p;

right =

strlen

(res)

-index_t-1;

mid = index_t - index_p-1;

//printf("%d,%d,%d\n",left,mid,right);

while

(mid >=2)

//printf("%d,%d,%d",left,mid,right);

if(left == right)

mask[i]=1

;else

mask[i]=-

1;}for

(i=0

; i)return0;

}

PAT乙級 1003 我要通過

考察了分而治之的思想。題目的表述讓我聯想起表示式的bnf描述 乙個數是表示式 在表示式兩邊加個括號也是表示式 兩個表示式相加也是表示式 接下來你全懂了 實際上就是按照題目要求,將檢查指標細分,以求達到庖丁解牛 逐個擊破的效果。源 c include include 得到 答案正確 的條件是 字串中必...

PAT乙級考試 1003 我要通過!

題目 思路錄入資料 由於給出的字串數量不多,建立乙個二維陣列儲存原始的字串,錄入字串時,注意把每行最後的 n替換為 0,方便後續的判斷 再建立乙個陣列儲存結果用於列印。判斷字串是否符合要求 前兩個條件很好理解,這裡不再贅述 對於第三個條件,我們設串中 p 前面的 a 有l個,p 和 t 中間的 a ...

PAT 乙級 1003 我要通過! 20 分

include include include include include using namespace std intmain scanf d n for int i 0 i n i if flag true cntp 1 cnta 0 cntt 1 if flag true result ...