# APCS實作題2021年9月第1題:七言對聯 > 日期:2023年9月15日 > 作者:王一哲 > 題目來源:110年9月實作題第1題 > [ZeroJudge 題目連結](https://zerojudge.tw/ShowProblem?problemid=g275) <br /> ## 題目 ### 問題描述 中文依照發音方式可以分為平聲與仄聲,假設我們把平聲標記為 $0$ 而仄聲標記為 $1$。 一個七言對聯包含兩個句子,每個句子包含恰好七個字。 七言對聯有三個限制: A. 二四不同二六同:每一句第二、四個字必須不同平仄,而第二、六個字必須相同平仄。 B. 仄起平收:第一句的結尾必須為仄聲,第二句的結尾必須為平聲。 C. 上下相對:第一、二句的第二、四、六個字平仄必須不同 給你 $n$ 組對聯,分別用 $0$、$1$ 代表平仄,請輸出它違反了哪幾條規則,若以上規則皆無違反,請輸出None <br /> ### 輸入說明 輸入一個正整數 $n$ 代表對聯數量,接下來有 $2n$ 行,每行有 $7$ 個數字,數字不是 $0$ 就是 $1$。 <br /> ### 輸出說明 對於每個對聯,輸出一行表示它違反了哪些規則,若三個規則都遵守則輸出 None。 <br /> ### 範例一:輸入 ``` 1 1 1 0 0 0 1 1 1 0 0 0 1 1 0 ``` ### 範例一:正確輸出 ``` AC ``` <br /> ### 範例二:輸入 ``` 1 0 1 1 0 1 1 1 1 0 1 1 0 0 0 ``` ### 範例二:正確輸出 ``` None ``` <br /> ### 範例三:輸入 ``` 2 0 1 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 1 1 ``` ### 範例二:正確輸出 ``` AB ABC ``` <br /> ## Python 程式碼 於 ZeroJudge 測試結果,最長運算時間約為 20 ms,使用記憶體最多約為 3.4 MB,通過測試。 ```python= n = int(input()) for _ in range(n): first = list(map(int, input().split())) # 第一句 second = list(map(int, input().split())) # 第二句 ans = "" # 答案 # 若違反規則A,則 ans 加上 A if first[1] == first[3] or first[1] != first[5] or second[1] == second[3] or second[1] != second[5]: ans += "A" # 若違反規則B,則 ans 加上 B if first[6] == 0 or second[6] == 1: ans += "B" # 若違反規則C,則 ans 加上 C if first[1] == second[1] or first[3] == second[3] or first[5] == second[5]: ans += "C" # 若 ans 長度為0,表示符合所有規則,ans 重設為 None if len(ans) == 0: ans = "None" # 印出 ans print(ans) ``` <br /><br /> ## C++ 程式碼 於 ZeroJudge 測試結果,最長運算時間約為 3 ms,使用記憶體最多約為 340 kB,通過測試。 ```cpp= #include <iostream> #include <string> using namespace std; int main() { int n; cin >> n; for(int i=0; i<n; i++) { int first[7], second[7]; for(int j=0; j<7; j++) { cin >> first[j]; // 第一句 } for(int j=0; j<7; j++) { cin >> second[j]; // 第二句 } string ans = ""; // 答案 // 若違反規則A,則 ans 加上 A if (first[1] == first[3] || first[1] != first[5] || second[1] == second[3] || second[1] != second[5]) ans += "A"; // 若違反規則B,則 ans 加上 B if (first[6] == 0 || second[6] == 1) ans += "B"; // 若違反規則C,則 ans 加上 C if (first[1] == second[1] || first[3] == second[3] || first[5] == second[5]) ans += "C"; // 若 ans 是空字串,表示符合所有規則,ans 重設為 None if (ans.empty()) ans = "None"; // 印出 ans cout << ans << endl; } return 0; } ``` <br /><br /> --- ###### tags:`APCS`、`Python`、`C++`