首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

PAT 簡單模擬專題習題集 (二) 精解:錘子剪刀布、洗牌機、最短距離、大數加法、多項式運算

     編輯:關於C語言

B1018 錘子剪刀布

規則:C(錘子) > J(剪刀) > B(布) > C。統計甲乙勝平負,並輸出各自獲勝最多的手勢 (並列按字母序)。

核心技巧:將 C/J/B 映射為 0/1/2,利用 (k1+1)%3 == k2 判斷甲勝 (甲手勢擊敗乙手勢)。

int map(char c) { return c=='B'?0 : c=='C'?1 : 2; }
// (k1+1)%3 == k2  → 甲勝
// k1 == k2        → 平
// else            → 乙勝

A1042 Shuffling Machine

題意:54 張牌初始序 S1~S13, H1~H13, C1~C13, D1~D13, J1~J2。給定洗牌順序陣列 next[i] (位置 i 移至 next[i]),重複 K 次,輸出最終序列。

關鍵:end[next[i]] = start[i] 完成一次洗牌,再 start = end 迭代 K 次。輸出時 id-- 後 suit=id/13, rank=id%13+1。

A1046 Shortest Distance

題意:環形公路 N 個出口,給定相鄰距離,M 次查詢任意兩出口最短距離。

解法:前綴和 dis[i] 存 1→i+1 距離,總長 sum。查詢 l,r (確保 l):direct = dis[r-1]-dis[l-1],答案 min(direct, sum-direct)。

A1065 A+B and C (64bit)

題意:判斷 A+B > C,A,B,C ∈ [-2^63, 2^63],溢位需處理。

溢位判斷:

  • 正溢位:A>0, B>0, A+B<0 → 結果為真 (實際和 > 2^63-1 ≥ C)。
  • 負溢位:A<0, B<0, A+B>=0 → 結果為假 (實際和 < -2^63 ≤ C)。
  • 無溢位:直接比較 A+B > C。

B1010 / A1002 / A1009 多項式運算三部曲

題目運算核心邏輯關鍵細節
B1010求導a[i-1] = a[i]*i; a[i]=0零多項式輸出 "0 0",指數遞降輸出
A1002加法coef[exp] += val合併同指數,輸出非零項計數 + 指數遞降
A1009乘法ans[exp1+exp2] += coef1*coef2雙重迴圈卷積,結果指數上限 2000

多項式乘法優化寫法 (結構體版)

struct Term { int exp; double coef; } poly[11];
double ans[2001] = {0};
// 讀入第一多項式到 poly[]
// 讀入第二多項式每項 (exp, cof)
//   for j=0..n-1: ans[exp + poly[j].exp] += cof * poly[j].coef;
// 輸出 ans[] 非零項

共同考點總結

  • 模擬題核心:按題目規則逐步模擬,資料結構選擇決定複雜度 (陣列直接定址 vs 鏈表 vs 樹)。
  • 邊界處理:零多項式、環形公路首尾相連、64 位整數溢位、洗牌索引 1-based 轉 0-based。
  • 輸出格式:PAT 極其嚴格,項計數、空格、換行、小數位數 (.1f/.2f) 必須完全一致。
  • 效能:N ≤ 10^5 時 O(N) 或 O(N log N) 才能通過,O(N^2) 必須優化 (如多項式乘法雙重迴圈上限 10*10=100 可接受)。

總結

此組題目涵蓋「遊戲規則模擬、陣列置換迭代、環形前綴和、溢位安全加法、多項式代數運算」五大經典模擬類型,是 PAT 甲/乙級模擬題的縮影。掌握「規則→狀態→迭代→輸出」的標準化解題流程,配合精確的格式控制,可高效攻克此類問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved