PAT(Programming Ability Test)模擬題側重基本功:輸入處理、迴圈控制、陣列操作、簡單資料結構。本文精選 6 道高頻題目,提供標準 C++ 解法與關鍵點註解。
核心:while(n!=1){ n = n%2? (3*n+1)/2 : n/2; step++; }
陷阱:3*n+1 可能溢位 int,實測 n≤1000 安全,但建議用 long long。
核心:學校編號 1~N 直接作陣列下標累加分數,O(N) 掃描找最大值。
關鍵:陣列大小開 100010 覆蓋最大 N=10^5。
核心:輸入範圍達 [-2^31, 2^31],A+B 可能溢位 32 位元,必須用 long long (64 位) 讀入與運算。
格式:printf("Case #%d: %s\n", i, a+b>c ? "true" : "false");
邏輯:從個位開始拆解數字,遇到目標數字 D 即 P = P*10 + D 疊加。
技巧:while(A){ if(A%10==Da) pA=pA*10+Da; A/=10; } 同時處理 A、B。
公式:ticks = C2-C1; sec = (ticks+50)/100(四捨五入到秒)
輸出:printf("%02d:%02d:%02d", sec/3600, sec%3600/60, sec%60);
O(1) 空間做法:M %= N,先輸出 [N-M, N-1] 再輸出 [0, N-M-1],計數器控制空格。
進階:三次反轉法(reverse(0,N-1); reverse(0,M-1); reverse(M,N-1))實現原地移動。
#define MAXN ... 集中管理for(int i=0;i,減少邊界錯誤 掌握這幾類模擬題模板,PAT 乙級 60 分以上輕鬆拿捏;甲級同類題只會擴大資料範圍或增加邊界條件,核心邏輯不變。